索引(在 MySQL 中也叫做“键( key )”)是存储引擎用于快速找到记录的一种数据结构。
索引对于良好的性能非常关键。尤其是当表中的数据量越来越大时,索引对性能的影响愈发重要。
索引基础
在 MySQL 中,存储引擎用类似的方法使用索引,其先在索引中找到对应值,然后根据匹配的索引记录找到对应的行,假如使用以下查询:
mysql > select first_name from sakila.actor where actor_id = 5;
如果在 actor_id 列上建有索引,则 MySQL 将使用该索引找到 actor_id 为5的行,也就是说,MySQL 先在索引上按值进行查找,然后返回所有包含该值的数据行。
索引可以包含一个或者多个列的值。如果索引包含多个列,那么列的顺序也十分重要,因为 MySQL 只能高效地使用索引的最左前缀列。
索引的优点
索引可以让服务器快速定位到表的指定位置。但是并不是索引的唯一作用,根据创建的索引的数据结构不同,索引也有一些其他的作用。
最常见的 B-Tree 索引,按照顺序存储数据,所以 MySQL 可以用来做 GROUP BY 操作。因为数据是有序的,所以 B-Tree 也就会将相关的列值都存储在一起。最后,因为索引中存储了实际的列值,所以某些查询只使用索引就能够完成全部查询。据此特性,总结下来索引有以下三个优点:
1. 索引大大减少了服务器要扫描的数据量
2. 索引可以帮助服务器避免排序和临时表
3. 索引可以将随机 I/O 变为顺序 I/O