SQL性能分析-Explain
查看当前数据库INSERT、UPDATE、DELETE、SELECT的访问频次:
show GLOBAL status like 'Com_______'
EXPLAIN 执行计划各字段含义:
ld
select查询的序列号,表示查询中执行select子句或者是操作表的顺序(id相同,执行顺序从上到下;id不同,值越大,越先执行)。
select type
表示 SELECT 的类型,常见的取值有 SIMPLE(简单表,即不使用表连接或者子查询)、PRIMARY(主查询,即外层的查询)UNION(UNION 中的第二个或者后面的查询语句)、SUBOUERY(SELECT/WHERE之后包含了子查询)等
type
表示连接类型,性能由好到差的连接类型为NULL、system、const、eq ref、ref、range、index、all.
possible key
显示可能应用在这张表上的索引,一个或多个。
Key
实际使用的索引,如果为NULL,则没有使用索引。
Key len
表示索引中使用的字节数,该值为索引字段最大可能长度,并非实际使用长度,在不损失精确性的前提下,长度越短越好
rows
MVSOL认为必须要执行查询的行数,在innodb引擎的表中,是一个估计值,可能并不总是准确的,。
filtered
表示返回结果的行数占需读取行数的百分比,filtered 的值越大越好。
重点关注:type、possible key、key、key_len、Extra
索引设计原则
1.针对于数据量较大,且查询比较频繁的表建立索引。
2.针对于常作为查询条件(where)、排序(order by)、分组(group by)操作的字段建立索引。
3.尽量选择区分度高的列作为索引,尽量建立唯一索引,区分度越高,使用索引的效率越高。
4.如果是字符串类型的字段,字段的长度较长,可以针对于字段的特点,建立前缀索引。
5.尽量使用联合索引,减少单列索引,查询时,联合索引很多时候可以覆盖索引,节省存储空间,避免回表,提高查询效率。
6.要控制索引的数量,索引并不是多多益善,索引越多,维护索引结构的代价也就越大,会影响增删改的效率。
7.如果索引列不能存储NU儿L值,请在创建表时使用NOT NULL约束它。当优化器知道每列是否包含NULL值时,它可以更好地确定哪个
索引最有效地用于查询。