代码改变世界

索引 - 查询类型和索引

2013-02-19 15:14  BIWORK  阅读(954)  评论(0编辑  收藏  举报
当您考虑是否要对列创建索引时, 请估计在查询中使用列的方式, 下表介绍了索引对其有用的查询类型.

表中的示例基于 AdventureWorks2008R2 示例数据库, 在 SQL Server Management Studio 中运行这些示例时. 您可以通过显示实际的执行计划来查看查询优化器选择的索引. 有关详细信息, 请参阅 如何显示实际执行计划.

分类

描述

考虑的索引

与特定值完全匹配

搜索与特定值完全匹配的项. 其中, 查询使用 WHERE 子句指定列项. 例如:

SELECT BusinessEntityID, JobTitle

FROM HumanResources.Employee

WHERE BusinessEntityID = 228;

BusinessEntityID 列的非聚集或聚集索引 

 

与 IN (x,y,z) 列表中的某个值完全匹配

搜索与指定值列表中的某个值完全匹配的项. 例如:

SELECT BusinessEntityID, JobTitle

FROM HumanResources.Employee

WHERE BusinessEntityID IN (288, 30, 15);

BusinessEntityID 列的非聚集或聚集索引 

值范围

搜索某个值范围, 其中, 查询指定的任何项的值在两个值之间. 例如:

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;

排序列或聚合列的非聚集索引或聚集索引 

对于排序列,考虑为列指定 ASC 或 DESC 顺序.

 

PRIMARY KEY 或 UNIQUE 约束

搜索与插入和更新操作中的新索引键值重复的值, 以强制 PRIMARY KEY 和 UNIQUE 约束. 例如:

INSERT INTO Production.UnitMeasure (UnitMeasureCode, Name, ModifiedDate)

VALUES ('OZ1', 'OuncesTest', GetDate());

约束中定义的列的聚集索引或非聚集索引 

 

列在选择列表中,但不在谓词中.

 

包含选择列表中未用于搜索和查找的一列或多列.例如:

SELECT Title, Revision, FileName

FROM Production.Document

WHERE Title LIKE N'%Maintenance%' AND Revision >= 0 ;

在 INCLUDE 子句中指定了 FileName 的非聚集索引.

 

PRIMARY KEY/FOREIGN KEY 关系中的 UPDATE 或 DELETE操作

在列参与 PRIMARY KEY/FOREIGN KEY 关系(无论带不带 CASCADE 选项)的更新或删除操作中搜索行.

外键列的非聚集索引或聚集索引.