Sql 我应该为两个方向定义索引吗
使用SQL Server 2012。假设我有一个链接表链接项目和大小 这张桌子看起来像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
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
的唯一组合无法识别?