如何合理地建立 Mysql 索引
前言
索引基础知识
建立索引
alter table table_name add index (index_name);
删除索引
ALTER TABLE table_name DROP INDEX index_name;
查看表中的索引
show index from table_name;
如何优化SQL语句?
SQL语句优化
的思路:
- 先看表的数据类型是否涉及得合理,有没有遵守选取数据类型越简单越小的原则;
- 表中的碎片是否整理;
- 表的统计信息是否收集,只有统计信息准确,执行计划才可以帮助我们优化SQL;
- 查看执行计划,检查索引的使用情况,没有用到索引,考虑创建;
- 在创建索引之前,还要查看说索引的选择性,来判断这个字段是否合适创建索引(尽量选择重复值少的字段)。
- 创建索引之后,再查看一下执行计划,对比两次结果,看是否查询效率提高了。
合理创建索引的三个 “经常”:
- 经常被查询的列(一般放在where 条件后面);
- 经常用于表连接的列;
- 经常排序分组的列(order by 或者 group by 后面的字段)。
一个案例分析创建索引前后的效率区别
建立索引之前,需要确定建立该索引是否对查询效率有帮助,我们可以通过explain
来查看某个查询语句的查询计划:
EXPLAIN select * from t where name = '45126-NAME'
type
,如果出现all
关键字,代表是全表扫描key
,如果是Null
代表没有使用索引rows
,表示在SQL执行过程中被扫描的行数,该数值越大,意味着耗时越大extra
,如果出现Using filesort
或者Using temporary
关键字,将很影响数据库性能filtered
,指返回结果的行占需要独到的行的百分比
然后,我们给t
表的name
字段添加索引:
alter table t add index (name)
再查看执行计划:
可以看到,添加索引后,rows
值从59912
变成了1
,说明实际扫描行数变得很短,扫描时间相应的变短了。
如何合理地建立 Mysql 索引相关推荐
- mysql建立高效索引,如何知道你建立的MySQL索引是高效,合理的
不管是开发人员,仍是数据库维护人员,给表建立索引是很常见的事情.普通到什么程度,初级,中级开发人员的印象中,只要写的sql语句效率不高,第一反应就是建索引,而无论这个字段是否适合建立索引.反正只要给字 ...
- MySQL索引介绍,普通索引,全文索引,空间索引,多列索引使用原则,建立索引常用的规则
转自:https://blog.csdn.net/tomorrow_fine/article/details/78337735 1.MySQL在创建数据表的时候创建索引 在MySQL中创建表的时候,可 ...
- 大文本存mysql怎么建索引_如何正确合理的建立MYSQL数据库索引
# 有这样一个表 P mysql> create table P (id int primary key, name varchar(10) not null, sex varchar(1), ...
- mysql 索引查询_mysql索引的建立和查询语句优化
首先表内容展示: # 300W条的模拟数据 # 并且没有建立任何索引 不建立索引的查询时间: 以id查询的(4秒多): 以email查询的(4秒多): 建立主键索引后: alter table s1 ...
- mysql索引三个字段查询两个字段_mysql中关于关联索引的问题——对a,b,c三个字段建立联合索引,那么查询时使用其中的2个作为查询条件,是否还会走索引?...
情况描述:在MySQL的user表中,对a,b,c三个字段建立联合索引,那么查询时使用其中的2个作为查询条件,是否还会走索引? 根据查询字段的位置不同来决定,如查询a, a,b a,b, ...
- mysql 关联索引_mysql中关于关联索引的问题——对a,b,c三个字段建立联合索引,那么查询时使用其中的2个作为查询条件,是否还会走索引?...
情况描述:在MySQL的user表中,对a,b,c三个字段建立联合索引,那么查询时使用其中的2个作为查询条件,是否还会走索引? 根据查询字段的位置不同来决定,如查询a, a,b a,b, ...
- mysql索引三个字段查询两个字段_mysql中关于关联索引的问题——对a,b,c三个字段建立联合索引,那么查询时使用其中的2个作为查询条件,是否还会走索引?......
情况描述:在MySQL的user表中,对a,b,c三个字段建立联合索引,那么查询时使用其中的2个作为查询条件,是否还会走索引? 根据查询字段的位置不同来决定,如查询a, a,b a,b, ...
- MySQL建立的索引看_MYSQL索引问题:索引在查询中如何使用?看了很多资料都只说索引的建立。是否建立了就不用再理会?...
# 有这样一个表 P mysql> create table P (id int primary key, name varchar(10) not null, sex varchar(1), ...
- mysql中关于关联索引的问题——对a,b,c三个字段建立联合索引,那么查询时使用其中的2个作为查询条件,是否还会走索引?...
情况描述:在MySQL的user表中,对a,b,c三个字段建立联合索引,那么查询时使用其中的2个作为查询条件,是否还会走索引? 根据查询字段的位置不同来决定,如查询a, a,b a,b, ...
最新文章
- Could not install packages due to anEnvironmentError: [WinError 5] 拒绝访问
- 北斗导航 | NED(北东地)转ECEF(地心地固)或ECEF转NED(Matlab源代码)
- 大话数据结构:多路查找
- 引用自己创建的css样式表_如何使用CSS创建联系表
- windows7电脑怎么永久关闭广告
- function core.php is missing,PHP代码
- javax.crypto.BadPaddingException: Blocktype ...
- Java 的自动装箱拆箱
- chrome插件,脚本中实现跨域请求
- 声卡调试精调效果都用那些宿主(DAW)机架和效果器插件
- MxCAD云图DWG转PDF
- 美国拉斯维加斯游戏CRAPS(花旗骰)掷骰子的游戏的C语言版本
- 如何简单理解光圈大小对手机摄影的影响?
- 又是一道题拉开差距!IOI落幕,中国队三金一银,美国华人选手再获冠军
- C++右值引用与函数返回值
- 互联网装修还有多少机会?
- 创建一个使用utf8字符集的数据库
- Linux下一些网络小技巧
- ubuntu 安装中文输入法(超简靠谱版)
- pa服务器系统,常见问题