索引中包含哪些列?

Q1:值得为SQL Server数据库中的外键列创建索引吗?

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

例如...

Table1

Table1ID int(主键)

Table2

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

我是否可以使用Table1ID创建Table2的索引,还是需要包含主键(Table2ID)。

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

Table3

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


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

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

Q3。 是的 。 每个具有外键的列应该有一个到其父键表的单独索引。

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

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


您正在考虑创建的索引都不是一个好主意。 但是,如果您正在寻找性能指标,则需要查看最经常使用的表格。 WHERE子句中哪些列最多; 并根据您的索引。

同时寻找最好的基数并将其放在WHERE子句的顶部。 考虑分区。

链接地址: http://www.djcxy.com/p/76305.html

上一篇: what columns to include in index?

下一篇: Primary and Foreign Key at the same time