日期:2014-05-17  浏览次数:20718 次

想问下UPDATE和索引的关系
不带where条件然后update一张表的某字段A,执行计划是Table Scan
如果在该表某字段B上有非聚集索引,那么执行计划是Index Scan
想问一下这个是否对性能有影响?为什么?可否指定update时索引?

另外,一张表只有1个字段和另一张表有10多个字段,在做同样update tb set a=0的情况下,是否性能有不同?

------解决方案--------------------

1、肯定对性能有影响,一种就是你说的表扫描,一种是索引,就像你要修改一本书的里一个错别字,
全表扫描是把整本书都看一遍,把错字修改,但索引就直接翻到第100页,修改了,就可以了,所以索引的方式效率更高。

------解决方案--------------------
index scan稍微比table scan低开销一点。你可能需要对A字段加非聚集索引,如果出现index scan,也有可能是你的where条件中,选择度太低,无法使用seek