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

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

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

SQL点点滴滴_查询类型和索引-转载的更多相关文章

  1. SQL点点滴滴_非聚集索引设计指南-转载

    非聚集索引包含索引键值和指向表数据存储位置的行定位器. 有关非聚集索引体系结构的详细信息, 请参阅 非聚集索引结构. 可以对表或索引视图创建多个非聚集索引. 通常, 设计非聚集索引是为改善经常使用的没 ...

  2. SQL点点滴滴_聚集索引设计指南-转载

    聚集索引基于数据行的键值在表内排序和存储这些数据行, 每个表只能有一个聚集索引, 因为数据行本身只能按一个顺序存储. 有关聚集索引体系结构的详细信息, 请参阅 聚集索引结构. 每个表几乎都对列定义聚集 ...

  3. SQL Server 2008 Datetime Cast 成 Date 类型可以使用索引(转载)

    很久没写blog,不是懒,实在是最近我这的访问速度不好,用firefox经常上传不了图片 ....... 今天无意发现了SQL Server 2008 Datetime Cast 成 Date 类型可 ...

  4. SQL点点滴滴_唯一索引设计指南-转载

    唯一索引能够保证索引键中不包含重复的值, 从而使表中的每一行从某种方式上具有唯一性, 只有当唯一性是数据本身的特征时, 指定唯一索引才有意义. 例如, 如果您希望确保 HumanResources.E ...

  5. SQL有三个类型的索引,唯一索引 不能有重复,但聚集索引,非聚集索引可以有重复

    重要: (1) SQL如果创建时候,不指定类型那么默认是非聚集索引 (2) 聚集索引和非聚集索引都可以有重复记录,唯一索引不能有重复记录. (3) 主键 默认是加了唯一约束的聚集索引,但是也可以在主键 ...

  6. SQL点点滴滴_聪明的小写法(持续更新中)

    1.生成序列号 SELECT number + 1 ,number FROM master..spt_values WHERE type = 'P' ORDER BY number 说明: maste ...

  7. SQL点点滴滴_特殊用法笔记

    声明: 本文为转载,感谢原作者的辛勤付出. 原博客地址为:http://www.cnblogs.com/icyJ/p/SQL_Statement.html 1.MERGE用法:关联两表,有则改,无则加 ...

  8. SQL SERVER 強制指定使用索引 -转载 只为学习

    今天很高兴 ,有学会了一种数据库优化的方式,哈哈 今天遇到一個查詢逾時的問題:兩段SQL,只差在WHERE,一個是WHERE COLUMN1='AAA',一個是WHERE COLUMN1='BBB', ...

  9. SQL点点滴滴_查看所有存储过程或视图的位置及内容

    代码:select a.name,a.[type],b.[definition] from sys.all_objects a,sys.sql_modules b where a.is_ms_ship ...

随机推荐

  1. JMeter工具接口性能压力测试分析与优化

    最近公司做的项目,要求对相关接口做性能压力测试,在这里记录一下分析解决过程. 压力测试过程中,如果因为资源使用瓶颈等问题引发最直接性能问题是业务交易响应时间偏大,TPS逐渐降低等.而问题定位分析通常情 ...

  2. 3dsmax2019卸载/安装失败/如何彻底卸载清除干净3dsmax2019注册表和文件的方法

    3dsmax2019提示安装未完成,某些产品无法安装该怎样解决呢?一些朋友在win7或者win10系统下安装3dsmax2019失败提示3dsmax2019安装未完成,某些产品无法安装,也有时候想重新 ...

  3. npm全局安装和局部文件安装区别

    全局安装往往是安装一个工具,他不是安装在一个文件夹下,而是安装在某个全局环境下,如目前我的安装路径是: C:\Users\cvter\AppData\Roaming\npm 在这里,我们可以看到所有全 ...

  4. springboot实现服务器端消息推送(H5原生支持)

    随着互联网的发展,传统的HTTP协议已经很难满足Web应用日益复杂的需求了.近年来,随着HTML5的诞生,WebSocket协议被提出,它实现了浏览器与服务器的全双工通信,扩展了浏览器与服务端的通信功 ...

  5. RESTful简单介绍

    1 什么是restful Restful就是一个资源定位及资源操作的风格.不是标准也不是协议,只是一种风格.基于这个风格设计的软件可以更简洁,更有层次,更易于实现缓存等机制. 资源:互联网所有的事物都 ...

  6. 阿里云Centos7上安装MySQL教程

    1 基本安装过程 1.查看系统是否安装了mysql软件 # rpm -qa|grep -i mysql 2.将已经安装过的软件卸载掉.注意:这样的卸载是不彻底,不过这里够用了 # yum remove ...

  7. 在ubuntu下使用Eclipse搭建Hadoop开发环境

    一.安装准备1.JDK版本:jdk1.7.0(jdk-7-linux-i586.tar.gz)2.hadoop版本:hadoop-1.1.1(hadoop-1.1.1.tar.gz)3.eclipse ...

  8. 忘记root密码的解决方法——进入单用户模式修改

    (1)在系统还在读秒的时候按任意键,你会看到如下界面: 然后按下‘e’

  9. 二:Vim常用命令

    一般模式下的命令: -- 插入命令 i 光标前插入 I 当前行开始 o 下一行 O 上一行插入新行 a 光标后插入 A 当前行末尾 -- 定位命令 :set nu 显示行号 :set nonu 取消行 ...

  10. 如何删除eclipse中已经保存的svn密码

    一.打开eclipse--->点击Window--->点击Perference,打开eclipse配置,输入svn,然后点击svn,找到下方svn接口,查看下svn是什么类型的接口,如果是 ...