我最近在对一张表进行性能优化/查询调优时,对使用外键作为聚集索引有疑问。表结构/关系如下:
我正在一个发票应用程序中工作,在发票和发票行项目上可以定义指南的最大允许金额。
有一个父表仅存储适用指南的条件,例如创建发票的州、邮政编码或行项目类型。GuidelineCondition。
有两个子表,仅定义能够提交的货币限制。GuidelineInvoiceAllowable、GuidelineLineItemAllowable。
这两个子表几乎完全通过与父条件表的连接来访问。这两个子表都有一个基于合成无意义键的聚集索引。我将聚集索引交换到了
像这样将聚集索引设置为外键违反了一些选择聚集索引的最佳实践,但由于表的访问模式,这似乎是正确的决定。
请参见此帖子以获取我正在考虑的一些最佳实践。SQL Server-何时使用聚集索引与非聚集索引? 数据库专家能否评论我是否做出了正确的决定?
我正在一个发票应用程序中工作,在发票和发票行项目上可以定义指南的最大允许金额。
有一个父表仅存储适用指南的条件,例如创建发票的州、邮政编码或行项目类型。GuidelineCondition。
有两个子表,仅定义能够提交的货币限制。GuidelineInvoiceAllowable、GuidelineLineItemAllowable。
这两个子表几乎完全通过与父条件表的连接来访问。这两个子表都有一个基于合成无意义键的聚集索引。我将聚集索引交换到了
GuideLineCondition
表的外键GuidelineConditionID
上。父表的聚集索引是合成键/主键GuidelineConditionID
。现在,由于连接中的两个表都具有相同连接列上的有序聚集索引,因此优化器可以高效地对这些表进行合并连接。像这样将聚集索引设置为外键违反了一些选择聚集索引的最佳实践,但由于表的访问模式,这似乎是正确的决定。
请参见此帖子以获取我正在考虑的一些最佳实践。SQL Server-何时使用聚集索引与非聚集索引? 数据库专家能否评论我是否做出了正确的决定?