ToB企服应用市场:ToB评测及商务社交产业平台
标题:
MySQL——索引下推
[打印本页]
作者:
南飓风
时间:
2024-8-10 08:52
标题:
MySQL——索引下推
1、使用前后对比
index Condition Pushdown(ICP)是MySQL5.6中新特性,是一种在存储引擎层使用索引过滤数据的优化方式。
假如没有ICP,存储引擎会遍历索引以定位基表中的行,并将它们返回给MySQL服务器,由MySQL服务器评估
WHERE
背面的条件是否保留行。
启用ICP后(默认启用),假如部分
WHERE
条件可以仅使用索引中的列举行筛选,则MySQL服务器会把这部分
WHERE
条件放到存储引擎筛选。然后,存储引擎通过使用索引条目来筛选数据,并且只有在满足这一条件时才从表中读取行。
好处:ICP可以镌汰存储引擎必须访问基表的次数和MySQL服务器必须访问存储引擎的次数。但是,ICP的
加速效果
取决于在存储引擎内通过
ICP
筛选掉的数据的比例。
例如以下语句
EXPLAIN SELECT * FROM `s1` WHERE key1 = 'vLuQVg' and key1 like '%v'
复制代码
此中的
key1 = 'vLuQVg’
可以使用到索引,但是
key1 like ‘%v’
却无法使用到索引,在以前版本中的MySQL中,是按照下边步骤来执行这个查询的:
先根据
key1 = 'vLuQVg’
这个条件。从二级索引
index_key1
中获取到对应的二级索引记录。
根据上一步骤得到的二次索引记录中的主键举行
回表
,找到完整的用户记录在检测记录是否符合**key1 like ‘%v’**这个条件,将符合条件的记录参加最后的效果集。
但是固然
key1 like ‘%v’
不能构成范围区间到场
range
访问方法的执行,但这个条件毕竟只涉及到了
key1
列,以是MySQL把上边的步骤改进了一下:
先根据
key1 = 'vLuQVg’
这个条件,定位到二级索引
index_key1
中对应的二级索引记录。
对于指定的二级索引记录,先不发急回表,而是先检测一下该记录是否满足
key1 like ‘%v’
这个条件,假如这个条件不满足,则该二级索引记录压根就没必要回表操作。
对于满足
key1 like ‘%v’
这个条件的二级索引记录举行回表操作。
我们说回表操作实在是一个
随机IO
,比力耗时,以是上述修改固然只改进一点点,但是可以省去许多多少回表操作的本钱。MySQL把它们的这个改进称之为
索引条件下推
(英文名:
Index Condition Pushdown
)。
2、ICP的使用条件
假如表访问的范例为range、ref、eq_ref和ref_or_null可以使用ICP
ICP可以用于Innodb和MyISAM表,包括分区表Innodb和MyISAM表
对于Innodb表,ICP仅用于
二级索引
。ICP的目标是镌汰全行读取次数,从而镌汰I/O操作
当SQL使用覆盖索引时,不支持ICP,由于这种情况使用ICP不会镌汰I/O
相干子查询的条件不能使用ICP
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
欢迎光临 ToB企服应用市场:ToB评测及商务社交产业平台 (https://dis.qidao123.com/)
Powered by Discuz! X3.4