MySQL的复合索引与覆盖索引

复合索引前导列特性 在MySQL中,如果创建了复合索引(name, salary, dept),就相当于创建了(name, salary, dept)、(name, salary)、(name)三个索引,这被称为复合索引前导列特性,因此在创建复合索引时应将最常用作查询条件的列放在最左边,依次递减。 未使用索引

SELECT * FROM employee WHERE salary = 8800;
SELECT * FROM employee WHERE dept = '部门A';
SELECT * FROM employee WHERE salary = 8800 and dept = '部门A';

使用索引

SELECT * FROM employee WHERE name = '刘峰';
SELECT * FROM employee WHERE name = '刘峰' and salary = 8800;
SELECT * FROM employee WHERE name = '刘峰' and salary = 8800 and dept = '部门A';

覆盖索引 覆盖索引又称之为索引覆盖,即select的数据列只从索引中就能得到,不必读取数据行,也就是只需扫描索引就可以得到查询结果。

关于覆盖索引的几点说明:

1.使用覆盖索引,只需从索引中就能检索到需要的数据,而不要再扫描数据表。
2.索引的体量往往比数据表小很多,因此只读取索引速度会非常快,也会极大减少数据访问量。
3.MySQL的查询优化器会在执行查询前判断,是否有一个索引可以覆盖所有的查询列。
4.并非所有类型的索引都可以作为覆盖索引,覆盖索引必须要存储索引列的值。像哈希索引、空间索引、全文索引等并不会真正存储索引列的值。

分析索引使用情况关键字:EXPLAIN

评论

(= ̄ω ̄=)··· 暂无内容!

回复

您还未登录,请先登录或者注册