一、关于聚集索引列的选择(参考)

1. 聚集索引所在的列,或者列的组合最好是唯一的。

当我们创建的聚集索引的值不唯一时,SQL Server则无法仅仅通过聚集索引列(也就是关键字)唯一确定一行。此时,为了实现对每一行的唯一区分,则需要SQL Server为相同值的聚集索引列生成一个额外的标识信息进行区分,这也就是所谓的uniquifiers。而使用了uniquifier后,对性能产生的影响分为如下两部分:

a. SQL Server必须在插入或者更新时对现在数据进行判断是否和现有的键重复,如果重复,则需要生成uniquifier,这个是一笔额外开销。

b. 因为需要对相同值的键添加额外的uniquifier来区分,因此键的大小被额外的增加了。因此无论是叶子节点和非叶子节点,都需要更多的页进行存储。从而还影响到了非聚集索引,使得非聚集索引的书签列变大,从而使得非聚集索引也需要更多的页进行存储。

2. 最好使用窄列或者窄列组合作为聚集索引列。原理同上。

3. 使用值很少变动的列或列的组合作为聚集索引列

a. 变动时,会造成页面重新排序,产生分页。

b. 会产生碎片。

c. 会引起非聚集索引的RID查找发生改变

4. 最好用自增列作为索引列。

参考:

1. T-SQL查询高级--理解SQL SERVER中非聚集索引的覆盖,连接,交叉和过滤,文章以图标的方式描述,思路清晰,便于理解。

2. 从性能的角度谈SQL Server聚集索引键的选择

最新文章

  1. spring maven pom.xml设置
  2. visio个人专注
  3. iOS一些关于日历的问题
  4. dmesg 的时间戳处理
  5. 【转】CDH5.x升级
  6. 【POJ】3523 The Morning after Halloween
  7. MySql事务及隔离级别
  8. 【读书笔记】《未来闪影》罗伯特·J·索耶
  9. ios-上拉电阻负载许多其他接口
  10. Sphinx下载、安装、配置、Hello World、文档阅读
  11. 乐观锁vs悲观锁
  12. C#订阅与发布标准实现
  13. Mysql报错[Warning] TIMESTAMP with implicit DEFAULT value is deprecated和Buffered warning: Changed limits
  14. ubuntu 安装 c语言的库函数man手册
  15. Java知多少(39)interface接口
  16. 【Hadoop学习之十一】MapReduce案例分析三-PageRank
  17. TAF /tars必修课(一):整体架构理解
  18. 汉诺塔问题python
  19. C3P0连接池使用教程
  20. PostgreSQL恢复误删数据

热门文章

  1. 用<pre>预格式化的文本
  2. js学习(5)语法专题
  3. ES6 Number
  4. Job for ssh.service failed because the control process exited with error code.......
  5. setsockopt设置socket状态
  6. win10下使用wget
  7. 数据库-mysql语句-查-WEB服务器
  8. Servlet执行流程和生命周期
  9. xpath获取一个标签下的多个同级标签
  10. C语言中,int型函数返回值可以为bool型。