时间复杂度:UPDATE ... WHERE vs UPDATE ALL

时间:2015-08-29 09:12:57

标签: sql sql-server performance

我有一个数据库表DuplicatesRemoved,可能有大量记录。我执行某些操作以删除我的应用程序中的重复用户,每次删除重复项时,我都会通过将它们存储在此表UserID中来跟踪重复的DuplicatesRemoved

此表包含位字段HistoryRecord。我需要在每次“RemoveDuplicates”操作结束时更新此字段。

DuplicatesRemoved上没有任何索引。

我想知道哪一个更好?

1

UPDATE DuplicatesRemoved SET HistoryRecord=1 WHERE HistoryRecord<>1

OR

2

UPDATE DuplicatesRemoved SET HistoryRecord=1

查询#1会比查询#2花费更少的时间吗?

我已经提到this question但仍然不确定哪一个对我更好。

2 个答案:

答案 0 :(得分:1)

在第一个选项中:

UPDATE DuplicatesRemoved SET HistoryRecord=1 WHERE HistoryRecord<>1

您必须找到这些记录,仅更新

在第二个选项中:

UPDATE DuplicatesRemoved SET HistoryRecord=1

您必须更新整个表格。

因此,假设您快速找到记录,并且最小化在更新期间获取的锁的数量,以及引擎写入日志文件的事务的总大小(即记录),第一个选项将更好我们需要能够回滚)。

显示执行计划将有助于此决定。

答案 1 :(得分:0)

在数据库中,您可以测量用于评估查询复杂性的磁盘访问次数,因为从外部存储器读取内容的时间大于在主内存中执行少量操作的时间。

如果没有索引,则两个查询具有相同数量的磁盘访问,因为两者都需要完全扫描关系。