6

Q1:在 SQL Server 数据库中为外键列创建索引是否值得?

Q2:如果我在 SQL Server 数据库中有两个相关的表,并且我想在外键列上创建索引以提高性能,我需要在索引中包含哪些列以及哪种类型的索引最适合?

例如...

Table1

Table1ID int(主键)

Table2

Table2ID int(主键)
Table1ID int(外键)

..我是只使用 Table1ID 为 Table2 创建一个索引,还是还需要包含主键(Table2ID)。

Q3:如果我扩展示例以包含与 Table1 和 Table2 相关的第三个表,我是为每一列创建一个索引还是为两列创建一个索引?

Table3

Table3ID int(主键)
Table1ID int(外键)
Table2ID int(外键)

4

2 回答 2

6

Q1。的。(如果您发现它们没有被经常使用,您可以随时删除它们)。

Q2。我会只使用 Table1ID 为 Table2 创建一个索引吗?的。假设索引的主要用途是帮助优化器连接这两个表。(而不是满足作为整体查询工作负载一部分的其他查询)。

Q3。的。每个带有外键的列都应该有一个指向其父键表的单独索引。

(假设你有一个 OLTP 数据库而不是 OLAP 数据库)

这篇文章提供了 TSQL,它将生成数据库中所有缺失的外键索引的脚本:TSQL:生成缺失的外键索引

于 2012-05-10T23:34:44.993 回答
0

您正在考虑创建的索引都不是一个坏主意。但是,如果您正在寻找性能度量,则需要查看最常使用表的方式。WHERE 子句中的哪些列最多;并将您的索引建立在这些基础上。

还要寻找最佳基数并将其放在 WHERE 子句的顶部。还要考虑分区。

于 2012-05-10T23:53:59.320 回答