多个SQL查询针对多行检查1行与1单个查询检查

时间:2013-05-03 22:08:36

标签: database performance database-performance overhead

我很好奇,有什么更好的表现。关于上下文的一点点:我正在处理需要输入数据库表的CSV文件,需要确保我闻到重复的内容。所以为了实现这一目标。有两种策略:

一个。如果数据库中的一列是重复的,则检查每一行 湾收集所有行,然后检查其中是否有任何重复

基本上是为了一个。

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

和b:

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

以上将为我提供db表中存在的一系列电子邮件,我可以使用它来过滤掉$csvLines[]中的电子邮件。

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

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

2 个答案:

答案 0 :(得分:1)

RDBMSes针对集合操作进行了优化,因此恕我直言,与进行1000次调用相比,进行一次处理整个数据集的调用总是更好(更快)。

答案 1 :(得分:1)

  

我赞成b,因为它进行了1次DB调用

你的直觉是正确的。

  

然后,由于第二次调用正在检查整个数据库表是否存在多个记录,我不太相信。

两种方法都在搜索完全相同的行,因此 1 没有区别。不同之处在于,对于第一种方法,数据库往返的价格将按行每行支付,而第二种方法只支付一次,无论行数是多少。

  

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

我建议您测量精确结果,但我希望1“大”查询会比1000次“小”查询快得多。


1 实际上,如果您的DBMS可以并行化查询执行,那么可能有利于大查询。