WHERE谓词对索引使用的影响
2014-01-15 22:12
246 查看
本篇博文只测试WHERE谓词对multi-column index使用的影响,主要篇幅是SQL代码+截图。详细内容请参考《Inside the SQL Server Query Optimizer 》--Benjamin Nevarez,Chapter 4:Index Selection-->The Mechanics of Index Selection(Page124).
![](http://images.cnitblog.com/blog/591899/201401/152025207207.x-png)
![](http://images.cnitblog.com/blog/591899/201401/152027160489.x-png)
索引第一列为‘=’,第二列没含操作表达式,则两列都可以用 seek,与where 后面的顺序无关
索引第一列为‘=’,第二列有操作表达式 (abs,upper,convert...),则第一列seek,第二列 scan,与where 后面的顺序无关
索引第一列不是‘=’,则第一列 seek,第二列scan ,与where后面的顺序无关
--利用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 --删除测试表
相关文章推荐
- cocos2dx 新建项目左下角提示错误project creation failed.(与InstallWizardForVS2010.js有关)
- DB2数据库DISTINCT与GROUP BY 对比
- SDL游戏之路(九)--动画制作
- hrbust 1997 又是一个神奇的布尔矩阵
- vector.size()是usigned
- IT学子成长指导类文章链接(十)
- vector.size()是usigned
- JAVA基础——内部类、匿名内部类
- 快速排序
- 61 Android Service 下载图片保存到Sdcard
- poj1329 Circle Through Three Points
- Ambiguous Permutations
- C语言之详解#ifdef等宏
- OSG 第三讲,OSGviewer加入键盘响应
- hrbust 1996 数学等式
- Java中的String为什么是不可变的? -- String源码分析
- ubuntu下改变用户名
- LearnVSXNow! #10 创建我们第一个工具集-重用代码
- hrbust 1995 伟大的一食堂
- GitHub之.gitignore使用1---Github使用gitignore忽略增加指定文件