我继承了 SQL SERVER 2005 数据库的一些数据库创建脚本。
我注意到的一件事是,所有主键都是作为非聚集
索引而不是聚集索引创建的。
我知道每个表只能有一个聚集索引,并且您可能希望将其放在非主键列上以提高搜索等的查询性能。但是没有其他CLUSTERED
索引在问题的 table 上。
所以我的问题是,除了上述原因之外,是否还有任何技术原因不在主键列上建立聚集索引。
最佳答案
在任何“正常”数据或查找表上:不,我看不出任何原因。
对于批量导入表或临时表之类的内容 - 这取决于情况。
令某些人惊讶的是,拥有良好聚集索引实际上可以加快 INSERT 或 UPDATE 等操作的速度。参见 Kimberly Tripps 优秀 The Clustered Index Debate continues....她在博文中详细解释了为什么会出现这种情况。
有鉴于此:我认为没有任何有效理由不拥有良好的聚集索引(狭窄、稳定、唯一、不断增加 = 在任何 SQL Server 表上,INT IDENTITY
是最明显的选择。
要深入了解如何以及为何选择集群键,请阅读 Kimberly Tripp 关于该主题的所有优秀博客文章:
http://www.sqlskills.com/BLOGS/KIMBERLY/category/Clustering-Key.aspx
http://www.sqlskills.com/BLOGS/KIMBERLY/category/Clustered-Index.aspx
“索引女王”的优秀作品! :-)
关于sql-server - SQL Server 2005 中没有聚集索引的原因,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4034076/