zoukankan      html  css  js  c++  java
  • 索引 查询类型和索引

    当您考虑是否要对列创建索引时, 请估计在查询中使用列的方式, 下表介绍了索引对其有用的查询类型.

    表中的示例基于 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 选项)的更新或删除操作中搜索行.

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

     

     

  • 相关阅读:
    重拾IP路由选择:CCNA学习指南中的IP路由选择
    Ubuntu Eclipse ns3编译中 遇到的OSError 系列问题
    Ubuntu 上 执行命令 java -version 显示 没有那个文件或目录
    Ubuntu 登陆界面无限循环问题 以及 root用户无法使用命令问题
    【TCP/IP详解 卷一:协议】TCP的小结
    Ubuntu上 配置Eclipse:安装CDT
    【TCP/IP详解 卷一:协议】第二十四章 TCP的未来与性能
    【TCP/IP详解 卷一:协议】TCP定时器 小结
    【TCP/IP详解 卷一:协议】第二十三章 TCP的保活定时器
    【TCP/IP详解 卷一:协议】第二十二章 TCP的坚持定时器
  • 原文地址:https://www.cnblogs.com/biwork/p/2917119.html
Copyright © 2011-2022 走看看