sql-server - SQL Server 2005 中没有聚集索引的原因

标签 sql-server sql-server-2005 tsql indexing clustered-index

我继承了 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/

相关文章:

sql-server-2005 - SQL CLR 聚合函数错误处理

sql - 如何在 SQL Server 2008 的 T-SQL 中比较两个字符串是否包含相同的单词?

c# - SQL Server 中类似于 c# 中的 string.format 的功能

java - 通过 JPA 条件查询从 SQL View 获取列表时出错

c# - Azure函数连接到本地sql访问被拒绝

sql-server - TSQL如何在xml列中选择具有技能的员工

sql-server - 为什么 Azure 管理门户中的查询不起作用?

sql - 执行 SQL Server 脚本

sql - 在 SQL Server 中分配行号,但按值分组

sql - 在 SQL 中交叉应用 bool 值