系统在某些时刻存在响应缓慢,开启了慢查询,发现有许多查询缓慢的SQL,
这里想着优化一下查询,奈何技术不扎实,花了些时间系统学习了下SQL调优基本分析,这里记录一下。参考B站周阳-https://www.bilibili.com/video/BV1KW411u7vy?p=46&t=8
哪些情况下适合建立索引
哪些情况不要创建索引
Explain
id:select查询的序列号,包含一组数字,表示查询中执行select子句或操作表的顺序
select_type:查询的类型,主要用于区别普通查询、联合查询、子查询等复杂查询
type:访问类型排列,显示查询使用了何种类型
- type显示的是访问类型,是较为重要的一个指标,结果值从最好到最坏依次是:
system>const>eq_ref>ref>fultext>ref_or_null>index_merge>unique_subquery>index_subquery>range>index>ALL
- 挑重要的来说:
system>const>eq_ref>ref>range>index>ALL
,一般来说,得保证查询至少达到range级别,最好能达到ref。
possible_keys
- 显示可能应用在这张表中的索引,一个或多个
- 若查询涉及的字段上存在索引,则该索引将被列出,但不一定被查询实际使用
key
-
实际使用的索引,如果为null,则没有使用索引
-
若查询中使用了覆盖索引,则该索引仅出现在key列表中
ref
- 显示索引哪一列被使用了,如果可能的话,最好是一个常数。哪些列或常量被用于查找索引列上的值
- 由key_len可知t1表的索引idx_col1_col2被充分使用,t1表的col1匹配t2表的col1,t1表的col2匹配了一个常量,即’ac’
rows
根据表统计信息及索引选用情况,大致估算出找到所需的记录所需要读取的行数
Extra:
包含不适合在其他列中显示但十分重要的额外信息
CSDN:oneby-wang