效率应该和你的条件语句内容也有部分关系! 例如: UPDATE TestTB SET Col0='XXXX-XX-XX' WHERE CONVERT(VARCHAR(10),Col0,120) LIKE 'YYYY-YY-YY%'UPDATE TestTB SET Col0='XXXX-XX-XX',Col1='AAAA',Col2='BBBB',Col3='CCCC' WHERE Col0>=CAST('YYYY-YY-YY' AS DATETIME) AND Col0<=DATEADD(DD,1,CAST('YYYY-YY-YY' AS DATETIME))后者虽然比前者多更新了3列,但是当数据量很大的时候,后者比前者要高校!未亲测,我是从书上看来的。
例如:
UPDATE TestTB
SET Col0='XXXX-XX-XX'
WHERE CONVERT(VARCHAR(10),Col0,120) LIKE 'YYYY-YY-YY%'UPDATE TestTB
SET Col0='XXXX-XX-XX',Col1='AAAA',Col2='BBBB',Col3='CCCC'
WHERE Col0>=CAST('YYYY-YY-YY' AS DATETIME) AND Col0<=DATEADD(DD,1,CAST('YYYY-YY-YY' AS DATETIME))后者虽然比前者多更新了3列,但是当数据量很大的时候,后者比前者要高校!未亲测,我是从书上看来的。
update 一个字段与update 三个字段.
因为要这里因为操作量都不一样,io操作量就有了区别,所以同样的情况下(除了更新字段个数不一样外,其它都一样),绝对是update一个字段快。再说3楼的示意
每一个语句对col0进行了计算,第二个语句,没有对col0进行计算,而是对待匹配的值进行了计算,在查询时,那么第一个语句在col0建有索引的时候无法利用索引,要表描扫,增加了io操作。而第二个就可以利用索引.
接下来,如果col0,col1,col2均建有索引,需知索引在列update时需要修改的,第二个语句也就多了索引修改的操作。至于1,2哪个快要看具体情况了。
1是在取数时增加了io,2是在写数是增加了io
查看语句执行时间:
set statistics time on