SQL效率问题定位:
在进行SQL优化前,需定位哪些SQL效率低,这一过程有如下几种方式、方法:
- show profiles:是mysql提供可以用来分析当前会话中语句执行的资源消耗情况。可以用于SQL的调优测量,show profiles 能够在做SQL优化时帮助我们了解时间都耗费到哪里去了。
- 慢日志:慢日志默认是关闭的,可配置开启(slow_query_log)、指定慢日志文件名、配置查询时间限制(定义超过多少时间为慢查询)。
explain:
通过上述方法定位到效率低的SQL后,可通过explain分析SQL如何执行的。
字段 | 含义 |
id | select查询的序列号,是一组数字,表示的是查询中执行select子句或者是操作表的顺序。 |
select_type | 表示 SELECT 的类型,常见的取值有 SIMPLE(简单表,即不使用表连接或者子查询)、PRIMARY(主查询,即外层的查询)、UNION(UNION 中的第二个或者后面的查询语句)、SUBQUERY(子查询中的第一个SELECT)等 |
table | 输出结果集的表 |
type | 表示表的连接类型,性能由好到差的连接类型为( system ---> const-----> eq_ref ------> ref -------> ref_or_null---->index_merge ---> index_subquery -----> range ----->index ------> all ) |
possible_keys | 表示查询时,可能使用的索引 |
key | 表示实际使用的索引 |
key_len | 索引字段的长度 |
rows | 扫描行的数量 |
extra | 执行情况的说明和描述 |
MySQL默认使用存储引擎InnonDB的索引结构是B+树。而根据叶子节点的内存存储不同,索引类型分为主键索引(聚簇索引)和非主键索引(二级索引、辅助索引)。
主键索引的叶子节点,存储的是整行信息。非主键索引叶子节点存储的是主键的值。