有个表,里面建了非聚集索引,可是select的时候,为什么是索引scan,而不是索引seek呢?求助。语句为:select * from sPurchase_201209 where Pur_Item_Code = 2369409求助~~~

解决方案 »

  1.   

    Alter index all on sPurchase_201209 Rebuild  with  (fillfactor=90, sort_in_tempdb = ON)
    已使用上述语句rebuild索引,但是执行计划里还是索引scan。。为毛
      

  2.   

    我在别的索引列上做条件写查询,用的都是索引seek。。这个列真怪
      

  3.   

    问题1、可能统计信息过时。
    问题2、你的数据分布太零散,导致需要scan才能找到所有数据
      

  4.   

     清空缓存
    dbcc dropcleanbuffers
     你强制使用索引对比下IOselect * from sPurchase_201209  with(index=IndexNAme) 
     where Pur_Item_Code = 2369409可能是查询优化器给你又花了,scan的代价并不一定比seek高
      

  5.   

    可能是查询优化器给你优化了,scan的代价并不一定比seek高写错字了
      

  6.   

    用with index确实是索引seek。。不用with index就是索引scan,真蛋疼。。看来要加上with index了。。感谢。。结贴算了
      

  7.   

    强制使用with很容易出问题。先要找出为什么scan才是根本
      

  8.   

    你急啥,这里是查询优化器给你优化后的结果,查询优化器认为“scan比seek代价小”就选择了scan
    你强制使用索引,结果页不一定最优啊
    原因可能是索引碎片,
    或者是数据分布导致,你的查询条件的数据在整个表中分布的太多