+----+-------------+-------+------------+------+---------------+----------+---------+-------------------+--
----+----------+-------------------------+
|id|select_type|table|partitions|type|possible_keys|key|key_len|ref|
rows|filtered|Extra|
+----+-------------+-------+------------+------+---------------+----------+---------+-------------------+--
----+----------+-------------------------+
|1|SIMPLE|s1|NULL|ALL|NULL|NULL|NULL|NULL|
9688|100.00|NULL|
|1|SIMPLE|s2|NULL|ref|idx_key1|idx_key1|303|xiaohaizi.s1.key1
|1|10.00|Usingwhere;Notexists|
+----+-------------+-------+------------+------+---------------+----------+---------+-------------------+--
----+----------+-------------------------+
2rowsinset,1warning(0.00sec)
上
述
查
询
中
s1
表
是
驱
动
表
,
s2
表
是
被
驱
动
表
,
s2.id
列
是
不
允
许
存
储
NULL
值
的
,
⽽
WHERE
⼦
句
中
⼜
包
含
s2.idISNULL
的
搜
索
条
件
,
这
意
味
着
必
定
是
驱
动
表
的
记
录
在
被
驱
动
表
中
找
不
到
匹
配
ON
⼦
句
条
件
的
记
录
才
会
把
该
驱
动
表
的
记
录
加⼊到
最
终
的
结
果
集
,
所
以
对
于
某条
驱
动
表
中
的
记
录
来
说
,
如
果
能
在
被
驱
动
表
中
找
到
1
条
符
合
ON
⼦
句
条
件
的
记
录
,
那
么
该
驱
动
表
的
记
录
就
不
会
被
加⼊到
最
终
的
结
果
集
,
也
就
是
说
我
们
没
有
必
要
到
被
驱
动
表
中
找
到全
部
符
合
ON
⼦
句
条
件
的
记
录
,
这
样
可
以
稍
微
节
省
⼀
点
性
能
。
⼩
贴
⼠
:
右
(
外
)
连
接
可
以
被
转
换
为
左
(
外
)
连
接
,
所
以
就
不
提
右
(
外
)
连
接
的
情
况
了
。
Usingintersect(...)
、
Usingunion(...)
和
Usingsort_union(...)
如
果
执
⾏计
划
的
Extra
列出
现
了
Usingintersect(...)
提
示
,
说
明
准
备
使
⽤
Intersect
索
引
合
并
的
⽅
式
执
⾏
查
询
,
括
号
中
的
...
表
示
需
要
进
⾏
索
引
合
并
的
索
引
名
称
;
如
果
出
现
了
Usingunion(...)
提
示
,
说
明
准
备
使
⽤
Union
索
引
合
并
的
⽅
式
执
⾏
查
询
;
出
现
了
Usingsort_union(...)
提
示
,
说
明
准
备
使
⽤
Sort-Union
索
引
合
并
的
⽅
式
执
⾏
查
询
。
⽐
如
这
个
查
询
的
执
⾏计
划
:
mysql>EXPLAINSELECT*FROMs1WHEREkey1='a'ANDkey3='a';
+----+-------------+-------+------------+-------------+-------------------+-------------------+---------+--
----+------+----------+-------------------------------------------------+
|id|select_type|table|partitions|type|possible_keys|key|key_len|
ref|rows|filtered|Extra|
+----+-------------+-------+------------+-------------+-------------------+-------------------+---------+--
----+------+----------+-------------------------------------------------+
|1|SIMPLE|s1|NULL|index_merge|idx_key1,idx_key3|idx_key3,idx_key1|303,303|
NULL|1|100.00|Usingintersect(idx_key3,idx_key1);Usingwhere|
+----+-------------+-------+------------+-------------+-------------------+-------------------+---------+--
----+------+----------+-------------------------------------------------+
1rowinset,1warning(0.01sec)
其
中
Extra
列
就
显
示
了
Usingintersect(idx_key3,idx_key1)
,
表
明
MySQL
即
将
使
⽤
idx_key3
和
idx_key1
这
两个
索
引
进
⾏
Intersect
索
引
合
并
的
⽅
式
执
⾏
查
询
。
⼩
贴
⼠
:
剩
下两
种
类
型
的
索
引
合
并
的
E
xtr
a
列
信
息
就
不⼀⼀
举例
⼦
了
,
⾃
⼰
写
个
查
询
瞅瞅
呗
~
Zerolimit
当
我
们
的
LIMIT
⼦
句
的
参
数
为
0
时
,
表
示
压
根
⼉
不
打
算
从
表
中
读
出
任何
记
录
,
将
会
提
示
该
额
外
信
息
,
⽐
如
这
样
:
mysql>EXPLAINSELECT*FROMs1LIMIT0;
+----+-------------+-------+------------+------+---------------+------+---------+------+------+----------+-
-----------+
|id|select_type|table|partitions|type|possible_keys|key|key_len|ref|rows|filtered|
Extra|
+----+-------------+-------+------------+------+---------------+------+---------+------+------+----------+-
-----------+
|1|SIMPLE|NULL|NULL|NULL|NULL|NULL|NULL|NULL|NULL|NULL|
Zerolimit|
+----+-------------+-------+------------+------+---------------+------+---------+------+------+----------+-
-----------+
1rowinset,1warning(0.00sec)
评论5
最新资源