表中的示例基于 AdventureWorks 示例数据库。在 SQL Server Management Studio 中运行这些示例时,您可以通过显示实际的执行计划来查看查询优化器选择的索引。有关详细信息,请参阅如何显示实际执行计划。
列谓词为下列之一的查询
查询说明和示例
考虑的索引
与特定值完全匹配
搜索与特定值完全匹配的项,其中,查询使用 WHERE 子句指定列项。例如:
SELECT EmployeeID, Title
FROM HumanResources.Employee
WHERE EmployeeID = 228;
EmployeeID 列的非聚集或聚集索引。
与 IN (x,y,z) 列表中的某个值完全匹配
搜索与指定值列表中的某个值完全匹配的项。例如:
SELECT EmployeeID, Title
FROM HumanResources.Employee
WHERE EmployeeID IN (288, 30, 15);
EmployeeID 列的非聚集或聚集索引。
值范围
搜索某个值范围,其中,查询指定的任何项的值在两个值之间。例如:
SELECT ProductModelID, Name
FROM Production.ProductModel
WHERE ProductModelID BETWEEN 1 and 5;
或
WHERE ProductModelID >= 1 AND ProductModelID <= 5
ProductModelID 列的聚集索引或非聚集索引。
表之间的联接
基于联接谓词,在一个表中搜索与另一个表中的某个行匹配的行。例如:
SELECT a.ProductAssemblyID, b.Name, a.PerAssemblyQty
FROM Production.BillOfMaterials AS a
JOIN Production.Product AS b
ON a.ProductAssemblyID = b.ProductID
WHERE b.ProductID = 900;
ProductID 和 ProductAssemblyID 列的聚集索引或非聚集索引。
LIKE 比较
搜索以特定字符串(如 abc%)开头的匹配行。例如:
SELECT CountryRegionCode, Name
FROM Person.CountryRegion
WHERE Name LIKE N'D%'
Name 列的非聚集或聚集索引。
排序或聚合
需要隐式或显式排序顺序或聚合 (GROUP BY)。例如:
SELECT a.WorkOrderID, b.ProductID, a.OrderQty, a.DueDate
FROM Production.WorkOrder AS a
JOIN Production.WorkOrderRouting AS b
ON a.WorkOrderID = b.WorkOrderID
ORDER BY a.WorkOrderID;