添加第二个ID列是否有利于索引?

xr2*_*0xr 1 t-sql indexing sql-server-2005

假设我在SQL Server 2005中有一个带有两个外键fk_FacilityID和fk_OrderID的表tbl_FacilityOrders.它可能包含来自几百个设施的订单.我需要查询单个记录,并且我可以使用facilityID和orderID.在fk_FacilityID上定义索引然后fk_OrderID更好并将两者传递给查询或仅使用fk_OrderID.由于设施ID比订单ID少,我可以看到先淘汰其他设施的记录可能是有益的.

第二个问题是,如果我正在使用上面的两个columnn查询,那么我在WHERE子句列中编写的内容列表或者是否足够引擎以按索引的顺序对它们进行评估?

EG是:

WHERE fk_facilityID = @FacilityID AND fk_OrderID = @OrderID
Run Code Online (Sandbox Code Playgroud)

相当于:

WHERE fk_OrderID = @OrderID AND fk_FacilityID = @FacilityID
Run Code Online (Sandbox Code Playgroud)

JNK*_*JNK 7

在fk_FacilityID上定义索引然后fk_OrderID更好并将两者传递给查询或仅使用fk_OrderID.

如果OrderId是唯一的,那么为给定的场景添加其他字段没有真正的额外好处.不过,对你的FK进行索引是一个好主意,因为它们永远是JOIN关键.

如果我正在使用上面的两个columnn查询,那么我在物质中编写WHERE子句列的顺序是否是足够的引擎以按索引的顺序评估它们?

不,订单在这里无关紧要.重要的是字段的SETS匹配,即FieldA和FieldB都在索引和WHERE子句中.

字段索引的顺序DOES事情,虽然.如果不知道第一个字段的值,则不能在索引中使用第二个字段.