原文:《SQL优化-索引》http://database.ctocio.com.cn/tips/272/7588272.shtml
1.聚集索引(clustered index,也称聚类索引、簇集索引),就是数据排列的物理结构顺序。好比查新华字典,知道拼音直接查字,声母b的一定是排在a的后面,一本字典有且只有这一种排列顺序。所以说聚集索引一张表只能有一个。
2.非聚集索引(nonclustered index,也称非聚类索引、非簇集索引),就是数据排列的逻辑顺序。好比知道字的结构去查该字的拼音,通过偏旁部首查到的字对应的实际页数是不同的,如“把、插 ”两个都是提手旁,假设排在一起,实际"把"字是第50页,而"插"字却是在100页。非聚集索引可以有多个。
3.何时使用聚集索引或非聚集索引(很重要)。
动作描述 | 使用聚集索引 | 使用非聚集索引 |
外键列 | 应 | 应 |
主键列 | 应 | 应 |
列经常被分组排序(order by) | 应 | 应 |
返回某范围内的数据 | 应 | 不应 |
小数目的不同值 | 应 | 不应 |
大数目的不同值 | 不应 | 应 |
频繁更新的列 | 不应 | 应 |
频繁修改索引列 | 不应 | 应 |
一个或极少不同值 | 不应 | 不应 |
4.索引使用的误区
- 主键就是聚集索引。根据上面第三点的使用条件,可以推知并非一定设置主键为聚集索引为最优。
- 只要建立索引就能显著提高查询速度。还是要具体看需要经常排序的字段。
- count(*)比count(字段)慢。count(*)和用count(主键)的速度是相当的,而count(*)却比其他任何除主键以外的字段汇总速度要快,而且字段越长,汇总的速度就越慢。
5.一些有用的技巧
- order by按聚集索引列排序效率最高
-
聚集索引建立在:
(1)最频繁使用的、用以缩小查询范围的字段上;
(2)最频繁使用的、需要排序的字段上。