- explain执行计划
EXPLAIN或者DESC命令获取MySQL如何执行SELECT语句的信息,包括在SELECT语句执行过程中表如何连接和连接的顺序。
EXPLAIN执行计划各字段含义:
注:进行查询操作没有访问任何表时,type为NULL;
通过主键或唯一索引进行访问时,type为const;
使用非唯一性索引进行查询时,type为ref;
进行全表扫描时,type为all;
6、索引使用
- 最左前缀法则
- 范围查询
- 索引列运算
不要在索引列上进行运算操作,索引将失效。
- 字符串不加引号
字符串类型字段使用时,不加引号,索引将失效。
- 模糊查询
如果仅仅是尾部模糊匹配,索引不会失效。如果是头部模糊匹配,索引失效。
- or连接的条件
用or分割开的条件,如果or前的条件中的列有索引,而后面的列中没有索引,那么涉及的索引都不会被用到。
由于age没有索引,所以即使id,phone有索引,索引也会失效。所以需要针对于age也要建立索引。
- 数据分布影响
如果MySQL评估使用索引比全表更慢,则不使用索引。
- SQL提示
SQL提示,是优化数据库的一个重要的手段,简单来说,就是在SQL语句中加入一些人为的提示来达到优化操作的目的。
注:use index是建议使用,ignore index忽略使用,force index是强制使用。
- 覆盖索引
尽量使用覆盖索引(查询使用了索引,并且需要返回的列,在该索引中已经全部能够找到),减少使用select *。
- 前缀索引
- 单列索引与联合索引
注:多条件联合查询时,MySQL优化器会评估哪个字段效率更高,会选择该索引完成本次查询。
- 索引设计原则