sql-server - SQL Server中如何选择聚集索引?

标签 sql-server database-design sql-server-2008 primary-key clustered-index

通常,聚集索引是通过设置主键在 SQL Server Management Studio 中创建的,但是我最近关于 PK <-> 聚集索引 ( Meaning of Primary Key to Microsoft SQL Server 2008 ) 的问题表明,没有必要将 PK 和聚集索引设置为平等。

那么我们应该如何选择聚集索引呢?让我们看下面的例子:

create table Customers (ID int, ...)
create table Orders (ID int, CustomerID int)

我们通常会在两个 ID 列上创建 PK/CI,但我考虑为 CustomerID 中的订单创建它。这是最好的选择吗?

最佳答案

根据索引女王 - Kimberly Tripp 的说法 - 她在聚集索引中寻找的主要内容是:

  • 独特
  • 缩小
  • 静态

如果您还可以保证:

  • 不断增加的模式

那么您就非常接近拥有理想的聚类 key 了!

查看她的整个blog post here ,还有另一个非常有趣的关于集群关键对表操作的影响:The Clustered Index Debate Continues .

任何像 INT(尤其是 INT IDENTITY)或者可能是 INT 和 DATETIME 的东西都是理想的候选者。由于其他原因,GUID 根本不是好的候选者 - 因此您可能有一个 GUID 作为您的 PK,但不要将您的表聚集在它上面 - 它会变得碎片化,无法识别,并且性能会受到影响。

关于sql-server - SQL Server中如何选择聚集索引?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2267326/

相关文章:

sql-server - 将任务放入序列容器后无法连接到数据库

database-design - MongoDB 分析模式

sql-server - 触发处理多个插入

mysql - SQL 服务器 : How to override Error 0xc02020a1: Data Flow Task 1: Data conversion failed

sql - 如何安排作业每天运行 SQL 查询?

sql-server - 执行 SQL 查询时在结果表中显示 NULL 值

sql - 插入 sql server 错误 : invalid object name

mysql - 关系数据库中自定义字段的设计模式

php - 嵌套评论背后的算法是什么?

时间:: passing dataTable to stored procedure: column order issue