针对一行进行多个SQL查询检查vs针对多行进行单个查询检查



我很好奇,什么有更好的性能。稍微介绍一下上下文:我正在处理一个CSV文件,该文件需要输入到数据库表中,并且需要确保嗅出重复项。为了达到这个目的。有两种策略:

。检查数据库中的每一行是否有一个列是重复的
b.收集所有行,然后检查其中是否有重复的

本质上是a。

SELECT count(*) FROM table WHERE UniqueColumn = $uniqueColumnFromCSV

and for b:

SELECT UniqueColumn FROM table 
 WHERE UniqueColumn in ($uniqueColumn1FromCSV,$uniq....,$uniqueColumn2FromCSV);

上面的代码将给我一个db表中存在的电子邮件数组,我可以用它来过滤掉$csvLines[]中的电子邮件。

我倾向于b,因为它进行1个DB调用,并且不会通过处理每一行来停止CSV文件读取机制。然后,由于第二个调用是检查整个DB表是否存在多条记录,所以我不太相信。

为了讨论方便,我们可以忽略CSV部分。我真正感兴趣的是了解对DB进行1000次调用以检查是否存在uniqueColumn值与对DB进行1次调用以检查哪些uniqueColumn是重复的

的性能

我赞成b,因为它使1 DB调用

你的直觉是对的。

然后,由于第二个调用是检查整个DB表是否存在多条记录,所以我不太相信。

两个方法都在搜索完全相同的行,所以这里没有区别1。不同之处在于,对于第一个方法,每行支付一次数据库往返的费用,而对于第二个方法,无论行数如何,只支付一次。

我真正感兴趣的是了解对DB进行1000次调用以检查是否存在uniqueColumn值与对DB进行1次调用以检查哪些uniqueColumn是重复的性能。

我建议您测量精确的结果,但我希望1个"大"查询将明显快于1000个"小"查询。


1实际上可能存在,如果您的DBMS可以并行执行查询,则支持大查询。

rdbms针对集合操作进行了优化,因此在我看来,处理整个数据集的一次调用总是比进行1000次调用更好(更快)。

相关内容

  • 没有找到相关文章

最新更新