先执行
后的
,再执行
后的
,和索引的顺序不一致,
等级为
,扫描行数
是
"
。
在当前索引下,第一条
索引的利用率比第二条更高。
如果我们之前使用的是第二个
,就要调整索引的顺序,使其和
的执行顺序一致。
如果我们之前两个
都有用到,就要再建一个复合索引
。
问题是,
是如何处理语句、并分析出查询或表结构的性能瓶颈的呢?
这里就要提到
了,我们可以通过
来获得:
表的读取顺序
表的读取操作的操作类型
哪些索引可以使用
哪些索引被实际使用
表之间的引用
每张表有多少行被优化器查询
在前面的示例中,执行
时,结果得到了一个表格。
逐一解析下表格中的内容:
)
#$%&'(
选定的执行计划中查询的序列号
)
$
#)*$
简单的
查询
+
不使用
及子查询
),#-,.$
最外层的
查询
/0#%0$/0#%0
中的第二个或随后的
查询
+
不 依赖于外部查询的结果集
1*,#*1$
用于
'
子句里有子查询的情况
2
)
3$
输出行所引用的表
!
)
3$
'$
表仅有一行
$
用于用常数值比较
),#-,.4*.
时
$
查询使用了索引为主键或唯一键的全部时使用。即:通过索引关键字可能查找到
一个符合条件的行
$
通过索引关键字可能查找到多个符合条件的行
$
如同
+
但是
必须在初次查找的结果里找出
条目
+
然后进行二次
查找
'$
说明索引合并优化被使用了
$
在某些
#0
查询中使用此种类型
+
而不是常规的
$5#06**73
'89,%:;*,*'<
$
在 某 些
#0
查 询 中 使 用 此 种 类 型
+
与
类似
+
但是查
询的是非唯一 性索引
$
检索给定范围的行。当使用
=>
、
>
、
>?
、
=
、
=?
、
@*3:**0
或者
#0
操作符时
+
会使
用到
。
$
全表扫描
+
只是扫描表的时候按照索引次序进行而不是行。主要优点就是避免了排
序
+
但是开销仍然非常大。
$
最坏的情况
+
从头到尾全表扫描。
!
)
8$
哪些索引可能有助于查询,如果为空
+
说明没有可用的索引
A
)
8$
实际从
8
选择使用的索引
B
)
8$
使用的索引的长度
C
)
$
显示索引的哪一列被使用了
评论