索引除了可以让服务器快速定位到表的制定位置之外,根据创建的索引数据结构不同,索引也有一些其他的附加作用.
如最常见的B-Tree索引,按按照顺序存储数据,所以MySQL可以用来做ORDER BY 和GROUP BY操作.因为索引中数据是有序的,所以B-Tree也就会讲相关的列值都存储在一起.最后因为索引中存储了实际的列值,所以某些查询只是用索引就能够完成全部查询.总结下来索引有如下三个优点:
- 索引打打减少了服务器需要扫描的数据量
- 索引可以帮助服务器避免排序和临时表
- 索引可以将随机I/O变为顺序I/O
这里介绍一个评价索引是否适合某个查询的"三星系统":
索引将相关的记录放到一起则得一星;
如果索引中的数据顺序和查找中的排序顺序一致则获得二星;
如果索引中包含了查询中需要的全部列则获得"三星";