SQL Server索引 - 索引中包含哪些列?

时间:2012-05-10 23:23:55

标签: sql-server

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(外键)

2 个答案:

答案 0 :(得分:6)

Q1。 即可。 (如果您发现它们没有被定期使用,您可以随后将其删除。)

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

Q3。 即可。具有外键的每列应该具有与其父键表单独的索引。

(假设您拥有OLTP数据库而不是OLAP数据库)

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

答案 1 :(得分:0)

您想要创建的索引都不是一个坏主意。但是,如果您正在寻找性能指标,则需要了解如何最频繁地接触表格。 WHERE子句中哪些列最多;并将索引建立在那些索引上。

同时寻找最佳基数并将其置于WHERE子句的顶部。考虑分区。