请教关于“主键”和“聚集索引”
alino 2007-07-02 10:20:28 今天看到篇文章,里面有个表格:
-----------------------------------------------------
| 动作描述 | 使用聚集索引 | 使用非聚集索引 |
| 列经常被分组排序 | 应 | 应 |
| 返回某范围内的数据 | 应 | 不应 |
| 一个或极少不同值 | 不应 | 不应 |
| 小数目的不同值 | 应 | 不应 |
| 大数目的不同值 | 不应 | 应 |
| 频繁更新的列 | 不应 | 应 |
| 外键列 | 应 | 应 |
| 主键列 | 应 | 应 |
| 频繁修改索引列 | 不应 | 应 |
———————————————————————————
但是看到当“小数目的不同值”应该使用聚集索引,而“大数目的不同值”应该使用非聚集索引的时候,有些迷惑。
文中还特意指出,自增长的ID类型的字段,做主键可以,但是做聚集索引,意义不大。我想,这应该是验证ID类型字段属于“大数目的不同值”,应该使用非聚集索引吧。
主键是唯一索引,既然是唯一的,数目肯定大。比如有100万条记录,主键的可能值肯定就有100W个(不考虑复合主键),既然数目大,按照这个逻辑,主键应该使用非聚集索引。但是主键默认都是聚集索引,这是不是有些矛盾?
原文见:http://www.vckbase.com/document/viewdoc/?id=1307