开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第16天,点击查看活动详情
前言
上篇我们学习了MySQL中的数据库优化之索引优化。有兴趣的小伙伴可以阅读(MySQL优化之索引优化(六))。
下面我们继续学习MySQL中的数据库优化之索引优化。
索引下推
Index Condition Pushdown(ICP)是MySQL5.6的新特性,是一种在存储引擎层使用索引过滤数据的一种优化方式。ICP可以减少存储引擎访问基表的次数以及MySQL服务器访问存储引擎的次数。
ICP的使用条件
- 只能用于二级索引
- explain显示的执行计划中tpe值(join类型)为range、ref、eq_ref或ref_or_null
- 并非全部where条件都可以用ICP筛选,如果where条件的字段不在索引列中,还是要读取整表的记录到server端做过滤。
- ICP可以用于MyISAM和InnoDB存储引擎。
- MySQL5.6版本的不支持分区表的ICP功能,5.7版本的开始支持。
- 当SQL使用覆盖索引时,不支持ICP的优化方法。
普通索引和唯一索引
从性能角度考虑,这两个索引如何选择。先创建一张表,主键列id,字段k,并且k上创建索引。语句如下:
CREATE TABLE test(
id INT PRIMARY KEY,
k INT NOT NULL,
name VARCHAR(16),
index(k)
)engine=InnoDB;
插入几个值(100,1),(200,2),(300,3),(400,4),(500,5),(600,6)。
查询以下数据:
SELECT ID
FROM test
WHERE k = 5;
- 对于普通索引来说,查找到满足条件的第一个记录后,需要查找下一个记录,直到碰到第一个不满足k=5条件的记录。
- 对于唯一索引来说,由于索引定义了唯一性,查找到第一个满足条件的记录后,就会停止继续检索。
对查询来说,以上两种不同的方式,性能差异不大。
今天先学习到这里,明天继续。