本篇博文只测试WHERE谓词对multi-column index使用的影响,主要篇幅是SQL代码+截图。详细内容请参考《Inside the SQL Server Query Optimizer 》--Benjamin Nevarez,Chapter 4:Index Selection-->The Mechanics of Index Selection(Page124).

 --利用AdventureWorks.Sales.SalesOrderDetail 创建临时表
SELECT * INTO dbo.SalesOrderDetail
FROM Sales.SalesOrderDetail
--运行下面语句查看执行计划
SELECT ProductID,SalesOrderID,SalesOrderDetailID FROM dbo.SalesOrderDetail --table scan
--创建复合索引
CREATE INDEX multi_column ON dbo.SalesOrderDetail(ProductID,SalesOrderID)
--分别运行在索引第一列、第二列的 where条件查询
SELECT ProductID,SalesOrderID,SalesOrderDetailID FROM dbo.SalesOrderDetail
WHERE ProductID=771 --index seek
SELECT ProductID,SalesOrderID,SalesOrderDetailID FROM dbo.SalesOrderDetail
WHERE SalesOrderID=45233 --index scan
SELECT ProductID,SalesOrderID,SalesOrderDetailID FROM dbo.SalesOrderDetail
WHERE ABS(ProductID)=771 --talbe scan

 --分别运行在索引第一列、第二列的 where条件查询
SELECT ProductID,SalesOrderID,SalesOrderDetailID FROM dbo.SalesOrderDetail
WHERE ProductID=771 AND SalesOrderID> 45233 --seek ProductID,seek SalesOrderID
SELECT ProductID,SalesOrderID,SalesOrderDetailID FROM dbo.SalesOrderDetail
WHERE ProductID=771 AND ABS(SalesOrderID)=45233 --seek ProductID,scan SalesOrderID
SELECT ProductID,SalesOrderID,SalesOrderDetailID FROM dbo.SalesOrderDetail
WHERE ProductID<771 AND SalesOrderID=45233 --seek ProductID,scan SalesOrderID


索引第一列为‘=’,第二列没含操作表达式,则两列都可以用 seek,与where 后面的顺序无关
索引第一列为‘=’,第二列有操作表达式 (abs,upper,convert...),则第一列seek,第二列 scan,与where 后面的顺序无关
索引第一列不是‘=’,则第一列 seek,第二列scan ,与where后面的顺序无关

 DROP TABLE dbo.SalesOrderDetail --删除测试表

WHERE谓词对索引使用的影响的更多相关文章

  1. SQLServer中重建聚集索引之后会影响到非聚集索引的索引碎片吗

    本文出处:http://www.cnblogs.com/wy123/p/7650215.html (保留出处并非什么原创作品权利,本人拙作还远远达不到,仅仅是为了链接到原文,因为后续对可能存在的一些错 ...

  2. mysql添加索引造成的影响

    尽管添加索引可以优化SQL语句的性能,但是添加索引的同时也会带来不小的开销.尤其是在有大量的索引的情况下. mysql添加索引造成的影响如下: 1.DML(数据操作语言)影响,在表上添加缩影会直接影响 ...

  3. Oracle索引梳理系列(九)- 浅谈聚簇因子对索引使用的影响及优化方法

    版权声明:本文发布于http://www.cnblogs.com/yumiko/,版权由Yumiko_sunny所有,欢迎转载.转载时,请在文章明显位置注明原文链接.若在未经作者同意的情况下,将本文内 ...

  4. Null 值对索引排序的影响案例一则

    --原SQL 语句如下:select * from (select tmp_tb.*, ROWNUM row_id from (select wpid, customer_id, customer_n ...

  5. Oracle分区索引

    索引与表类似,也可以分区: 分区索引分为两类: Locally partitioned index(局部分区索引) Globally partitioned index(全局分区索引) 下面就来详细解 ...

  6. oracle 性能优化--索引总结

    索引是建立在表的一列或多个列上的辅助对象,目的是加快訪问表中的数据: Oracle存储索引的数据结构是B*树.位图索引也是如此,仅仅只是是叶子节点不同B*数索引: 索引由根节点.分支节点和叶子节点组成 ...

  7. Oracle 创建索引的基本规则总结

    1.  选择索引字段的原则: 在WHERE子句中最频繁使用的字段 联接语句中的联接字段 选择高选择性的字段(如果很少的字段拥有相同值,即有很多独特值,则选择性很好) Oracle在UNIQUE和主键字 ...

  8. oracle(七)索引

    一.B-Tree索引 (1). 选择索引字段的原则: 在WHERE子句中最频繁使用的字段 联接语句中的联接字段 选择高选择性的字段(如果很少的字段拥有相同值,即有很多独特值,则选择性很好) Oracl ...

  9. SQL 创建索引,语法

    索引介绍.及原理 主键,唯一索引 聚集索引的关系 当数据库表的数据太过庞大,的时候我们能够通过加入索引的形式解决. 聚集索引:数据的实际存储顺序与我们做索引的顺序是一致的,这样的索引我们将它成为聚集索 ...

随机推荐

  1. POJ 1144 Network(Tarjan求割点)

    Network Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 12707   Accepted: 5835 Descript ...

  2. html 实体转换为字符:转换 UEditor 编辑器 ( 在 ThinkPHP 3.2.2 中 ) 保存的数据

    在 ThinkPHP 3.2.2 中使用 UEditor 编辑器保存文章内容时,数据库中保存的数据都被转义成实体,例如:&lt;p&gt;&lt;strong&gt;& ...

  3. [SHELL实例] (转)最牛B的 Linux Shell 命令 (一)

    本文编译自commandlinefu.com ( 应该是 Catonmat ) 的系列文章 Top Ten One-Liners from CommandLineFu Explained .作为一个由 ...

  4. Away3D引擎学习笔记,持续更新

    (1). 准备工作,一些必须知道的东西 (创建时间:2014-06-05) A.必要的开发语言基础.至少要懂点ActionScript 3.0语法(ActionScript 3.0语法及API参考), ...

  5. Bootstrap页面布局3 - BS布局以及流动布局

    1. <h1 class='page-header'>布局<small> 使用bootstrap网格系统布局网页</small></h1> 得到如图所示 ...

  6. java-访问权限

    使用以下修饰符来控制对属性和方法的访问: 1.public--公共的,其他任何类均可访问 2.private--私有的,只能在当前类内部被访问,其他都不能访问 3.protected--受保护的,相同 ...

  7. [转]硬盘分区表知识——详解硬盘MBR

    http://www.blogjava.net/galaxyp/archive/2010/04/25/319344.html 硬盘是现在计算机上最常用的存储器之一.我们都知道,计算机之所以神奇,是因为 ...

  8. 关于jQuery学习

    ≡[..]≡≡[..]≡ 所有的实例都位于document.ready里面--为了防止文档在未完全加载之前就运行函数导致操作失败. $(document).ready(function(){ --- ...

  9. 【转】设计模式 ( 十八 ) 策略模式Strategy(对象行为型)

    设计模式 ( 十八 ) 策略模式Strategy(对象行为型) 1.概述 在软件开发中也常常遇到类似的情况,实现某一个功能有多种算法或者策略,我们可以根据环境或者条件的不同选择不同的算法或者策略来完成 ...

  10. ssi服务器端指令

    SSI使用详解 你是否曾经或正在为如何能够在最短的时间内完成对一个包含上千个页面的网站的修改而苦恼?那么可以看一下本文的介绍,或许能够对你有所帮助.什么是SSI?SSI是英文Server Side I ...