SQL Server 2005中没有聚簇索引的原因

AJM*_*AJM 8 t-sql sql-server indexing sql-server-2005 clustered-index

我为SQL SERVER 2005数据库继承了一些数据库创建脚本.

我注意到的一件事是所有主键都创建为NON CLUSTERED索引而不是群集.

我知道每个表只能有一个聚簇索引,并且您可能希望将它放在非主键列上以查询搜索性能等.但是CLUSTERED问题中的表中没有其他索引.

所以我的问题是,除了上述之外,是否有任何技术原因不在主键列上有聚簇索引.

mar*_*c_s 8

在任何"正常"数据或查找表上:不,我没有看到任何理由.

在诸如批量导入表或临时表之类的东西上 - 这取决于.

令人惊讶的是,看起来拥有良好的聚簇索引实际上可以加快INSERT或UPDATE等操作.请参阅Kimberly Tripps优秀的Clustered Index辩论继续....博客文章中她非常详细地解释了为什么会这样.

有鉴于此:我认为没有任何正当理由不在INT IDENTITY任何SQL Server表上拥有良好的聚簇索引(窄,稳定,唯一,不断增加= 作为最明显的选择).

要深入了解如何以及为何选择群集密钥,请阅读Kimberly Tripp关于该主题的所有优秀博文:

http://www.sqlskills.com/BLOGS/KIMBERLY/category/Clustering-Key.aspx

http://www.sqlskills.com/BLOGS/KIMBERLY/category/Clustered-Index.aspx

来自"索引女王"的优秀作品!:-)


Bra*_*mir 6

集群表与堆表

(关于主题的好文章,请访问www.mssqltips.com)

HEAP表(没有聚簇索引)

  • 数据不以任何特定顺序存储

  • 除非还存在非聚集索引,否则无法快速检索特定数据

  • 数据页未链接,因此顺序访问需要返回索引分配映射(IAM)页面

  • 由于没有聚簇索引,因此不需要额外的时间来维护索引

  • 由于没有聚簇索引,因此不需要额外的空间来存储聚簇索引树

  • 这些表在sys.indexes目录视图中的index_id值为0

集群表

  • 数据基于聚簇索引键按顺序存储

  • 如果查询使用索引列,则可以基于聚簇索引键快速检索数据

  • 链接数据页以加快顺序访问需要额外的时间来维护基于INSERTS,UPDATES和DELETES的聚簇索引

  • 存储聚簇索引树需要额外的空间这些表在sys.indexes目录视图中的index_id值为1