zoukankan      html  css  js  c++  java
  • SQL SERVER2005 Index Scan效率

          以前在SQL SERVER 2000中,包括网上都说查询时“abc%”能使用到索引,“%abc%”不能使用到索引,一次做培训的时候,给大家介绍“%abc%”不能使用索引的例子发现,在SQL SERVER 2005中是可能用到索引。在SQL SERVER 2005中查询优化器的确做了很大提高,以下是例子:

       表[[zping.com]]]operator建立索引idx_operator:执行一下语句

       

    select * from dbo.[[zping.com]]] where operator like '%882ed0e644a73010e6475b8c308a4%'

       执行计划:

      

      这里发现查询是可以用到索引Index Scan(索引扫描)的。但效率很低:

      看看统计信息: 

    (4 行受影响)
    表 
    '[zping.com]'。扫描计数 1,逻辑读取 4519 次,物理读取 0 次,预读 0 次,lob 逻辑读取 0 次,lob 物理读取 0 次,lob 预读 0 次。

       这里看到搜索4行数据,用来4519次。看看索引信息

    select  name,dpages,used from sysindexes where name like 'idx_operator'

     结果:  

    name           dpages    used
    idx_operator    
    4481    4519

      看看索引覆盖读取的IO数:

    select operator from dbo.[[zping.com]]] where operator like '%882ed0e644a73010e6475b8c308a4%'

     统计信息:  

    (4 行受影响)
    表 
    '[zping.com]'。扫描计数 1,逻辑读取 4515 次,物理读取 0 次,预读 0 次,lob 逻辑读取 0 次,lob 物理读取 0 次,lob 预读 0 次。

      这里可以发现:索引全部是4515页,有4行就通过RID搜索了4次数据页IO,结果是4519个IO

        IO信息: 4515+4=4519 

      这时可以看到,数据库把全部索引信息全部搜索了一遍(包括根页,中间页和叶级页)。

     

      原因:

          1,索引只能向前和向后搜索。这里使用类似'%abcd%'来查询。 优化器根据统计信息估计成本使用成本很低,就全扫描索引(包括根页,中间页和叶级页

             低效
                Index Scan(索引扫描):就全扫描索引(包括根页,中间页和叶级页):         

            高效

                Index Seek(索引查找):通过索引向前和向后搜索 :

  • 相关阅读:
    商品
    正向代理和反向代理
    JS中的bind方法
    本地安装并运行http-server、browser-sync、webpack
    NPM——常用命令
    两层遍历的递归写法
    vue-cli中的index.html ,main.js , App.vue的关系
    NPM的由来——为什么要使用NPM
    关于this的指向
    MapReduce编程模型详解(基于Windows平台Eclipse)
  • 原文地址:https://www.cnblogs.com/zping/p/1260282.html
Copyright © 2011-2022 走看看