zoukankan      html  css  js  c++  java
  • WHERE谓词对索引使用的影响

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

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

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


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

    1 DROP TABLE dbo.SalesOrderDetail --删除测试表
    【作者】: 醒嘞
    【出处】: http://www.cnblogs.com/Uest/
    【声明】: 本文内容仅代表个人观点。如需转载请保留此段声明,且在文章页面明显位置给出原文链接!
  • 相关阅读:
    [LeetCode] 44. Wildcard Matching
    [LeetCode] 1431. Kids With the Greatest Number of Candies
    [LeetCode] 47. Permutations II
    [LeetCode] 77. Combinations
    [LeetCode] 40. Combination Sum II
    [LeetCode] 39. Combination Sum
    [LeetCode] 213. House Robber II
    [LeetCode] 198. House Robber
    [LeetCode] 338. Counting Bits
    [LeetCode] 259. 3Sum Smaller
  • 原文地址:https://www.cnblogs.com/Uest/p/3521458.html
Copyright © 2011-2022 走看看