Mysql可以为表创建索引,创建索引可以提高mysql查询效率,我们一般在常用查询列创建索引,如:where、 order by、group by如果有索引都会使用到。
创建索引不一定能提高mysql的查询效率。
如果数据表的数据特别少,是没有必要创建索引的,数据量大的情况下创建索对查询才有效果,比如数量几万或几十万的时候,多表联查,性能会得到明细的提升。
索引的缺点:insert update delete会慢,因为他们维护索引。
创建索引
索引类型:主键索引(主键id)、唯一索引(手机号,账号),组合索引,全文索引(基本用不到)
Index_name:是单例索引,index_name_price就是组合索引,也叫聚合索引,它包含了2列name和price创建了一个组合索引。
最左前缀原则
组合索引的使用要符合最左前缀原则,否则索引失效,比如:我们
select * from where name=’zhangsan’ and price>100,会使用到索引,而:
select * from where price>100 and name=’zhangsan’ 则否索引失效,用不到索引。
Index(a,b,c),组合索引的常见是有顺序的,where条件必须a=’’ and b=’’ and c=’’才能用全索引,否的话就会造成索引失效,或者用不全索引。
select * from where a=’’ and c=’’ ,这样只会用到部分索引,不能完全使用到这个组合索引。
只要where条件不是以a=’’开始,就不会用到索引。
执行计划
什么是执行计划呢?如何使用执行计划呢?
执行计划会能分析复杂SQL的执行过程,有哪些索引可以使用?是否用到了索引?是否进行了全表扫描,我可以通过explain关键查看mysql的执行计划。
附图:执行计划列名说明
上图转自:MySQL EXPLAIN详解 - 简书