扫描一定比查找慢吗


Warning: Undefined array key "HTTP_REFERER" in /www/wwwroot/prod/www.enjoyasp.net/wp-content/plugins/google-highlight/google-hilite.php on line 58

1,
  SCAN   Seek
堆  Table Scan  无
聚集索引 Clustered Index Scan Clustered Index Seek
非聚集索引 Index Scan  Index Seek
非聚集索引扫描产生的原因:因Index只包含了表的一小部分字段,占用的页面数量会比表格本身要小得多,故扫描索引表就比聚集索引扫描要高得多。
前提是索引中包含了所要求的字段,但为什么没用索引查找呢,可能是在此字段上运行了运算,或此字段是联合索引的非首项。
2,扫描一定比查找慢吗?不一定
构造场景:订单明细表, DetailID聚集索引,OrderID非聚集索引。返回产品,操作人。
利用OrderID过滤,那么正常流程是先通过OrderID非聚集索引查找满足条件的字段,因要返回产品,操作人等信息故
要通过lookup查到聚集索引上的产品,操作人。注意这里面有一个lookup.现在假设同一个OrderID对应的明细非常多,那么在
lookup阶段要花费大量的时间,大大超过在OrderID查找带来的性能提升,这种情况下,还不如直接来个聚集索引扫描快一些。
故在实际中,会发现应用非聚集索引查找的地方换成了聚集索引扫描,因为此种情况下,扫描来得还快一些,即非聚集索引存在并不一定使用,
若出现这种情况,请检查非聚集索引是否有大量重复,看能否消除。