Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/84.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 我应该为两个方向定义索引吗_Sql_Sql Server_Indexing - Fatal编程技术网

Sql 我应该为两个方向定义索引吗

Sql 我应该为两个方向定义索引吗,sql,sql-server,indexing,Sql,Sql Server,Indexing,使用SQL Server 2012。假设我有一个链接表链接项目和大小 这张桌子看起来像 itemSize: itemSizeId (int) itemId (int) sizeId (int) 如果我在itemId&sizeId上定义了一个复合索引,这样我就可以按大小快速查找一个项目,那么我是否也应该为sizeId&itemId定义一个索引,或者第一个索引是否覆盖了另一个方向?您应该根据要对其使用的查询定义一个索引 如果要执行具有以下内容的查询: where itemId = @itemId

使用SQL Server 2012。假设我有一个链接表链接项目和大小

这张桌子看起来像

itemSize

itemSizeId (int)
itemId (int)
sizeId (int)

如果我在
itemId&sizeId
上定义了一个复合索引,这样我就可以按大小快速查找一个项目,那么我是否也应该为
sizeId&itemId
定义一个索引,或者第一个索引是否覆盖了另一个方向?

您应该根据要对其使用的查询定义一个索引

如果要执行具有以下内容的查询:

where itemId = @itemId
及 其中size=@size

(这两个字段上没有其他子句),那么您应该有两个不同的索引


如果希望SQL Server将该索引用于其他目的(例如用于
order by

),则在执行复合索引时,可以首先利用其最左侧参数中的索引。例如,(ItemID,SizeID)的复合索引将允许您通过ItemID或ItemID和SizeID进行索引查找。如果您需要单独对SizeID进行索引查找,那么您可以按要求执行,否则我认为这将是一个毫无意义的索引。
itemSizeId
列的用途是什么?它标识了什么,
itemId
sizeId
的唯一组合无法识别?