Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server SQL Server索引-索引中包含哪些列?_Sql Server - Fatal编程技术网

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

Sql server SQL Server索引-索引中包含哪些列?,sql-server,Sql Server,问题1:在SQL Server数据库中为外键列创建索引值得吗 问题2:如果我在SQL Server数据库中有两个相关的表,并且我想在外键列上创建一个索引以提高性能,那么我需要在索引中包括哪些列,以及什么类型的索引最适合 例如 表1 表1ID int(主键) 表2 表2ID int(主键) 表1ID int(外键) …我是仅使用Table1ID为Table2创建索引,还是还需要包含主键(Table2ID) 问题3:如果我扩展示例以包括与表1和表2都相关的第三个表,我是为每一列创建一个索引还是为两列

问题1:在SQL Server数据库中为外键列创建索引值得吗

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

例如

表1

表1ID int(主键)

表2

表2ID int(主键)
表1ID int(外键)

…我是仅使用Table1ID为Table2创建索引,还是还需要包含主键(Table2ID)

问题3:如果我扩展示例以包括与表1和表2都相关的第三个表,我是为每一列创建一个索引还是为两列创建一个索引

表3

表3id int(主键)
表1ID int(外键)
表2ID int(外键)

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

问题2。我是否仅使用Table1ID为Table2创建索引。假设索引的主要预期用途是帮助优化人员连接这两个表。(而不是满足作为整体查询工作负载一部分的其他查询)

第三季度。带有外键的每一列都应该有一个单独的父键表索引

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


本文提供的TSQL将生成数据库中所有缺失外键索引的脚本:

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


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

谢谢回答米切尔小麦,我应该创建什么类型的索引(聚集或非聚集)?像创建聚集索引IX_Table2_Table1ID ON Table2(Table1ID)这样的内容是否足够,或者我是否应该添加任何选项?通常,所有FK索引都是非聚集索引。