1

我很好奇,有什么更好的性能。关于上下文的一点点:我正在处理一个 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 重复的性能

4

2 回答 2

1

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

于 2013-05-04T00:00:59.453 回答
1

我赞成 b,因为它会进行 1 个 DB 调用

你的直觉是正确的。

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

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

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

我建议您测量精确的结果,但我预计 1 个“大”查询将比 1000 个“小”查询快得多。


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

于 2013-05-04T00:03:16.310 回答