我很好奇,有什么性能更好。关于上下文的一些信息:我正在处理一个 CSV 文件,该文件需要输入到数据库表中,并且需要确保我能闻到重复项。所以为了达到这个目的。有两种策略:
一个。如果其中一列重复,则对照数据库检查每一行
b.收集所有行,然后检查其中是否有重复
本质上是为了一个。
SELECT count(*) FROM table WHERE UniqueColumn = $uniqueColumnFromCSV
对于 b:
SELECT UniqueColumn FROM table
WHERE UniqueColumn in ($uniqueColumn1FromCSV,$uniq....,$uniqueColumn2FromCSV);
上面会给我一个存在于 db 表中的电子邮件数组,我可以使用它来过滤掉我的 $csvLines[]
中的电子邮件。
我赞成 b,因为它进行 1 次数据库调用并且不会通过处理每一行来停止 CSV 文件读取机制。再一次,由于第二次调用是检查整个数据库表是否存在多条记录,我不太相信。
为了便于讨论,我们可以忽略 CSV 部分。我真正感兴趣的是对数据库进行 1000 次调用以检查是否存在 uniqueColumn 值与对数据库进行 1 次调用以检查哪些 uniqueColumn 重复的性能
最佳答案
I am in favor of b, since it makes 1 DB call
你的直觉是正确的。
Then again, since the 2nd call is checking the entire DB table for the existence of multiple records, I am not quite convinced.
这两种方法都搜索完全相同的行,所以没有区别1。不同之处在于,对于第一种方法,数据库往返的价格将每行支付一次,而对于第二种方法,无论行数如何,只支付一次。
What I am really interested in knowing is the performance of making 1000 calls to the DB to check if a uniqueColumn value is present vs making 1 call to the DB to check which of the uniqueColumns are duplicates.
我建议您测量精确的结果,但我预计 1 个“大”查询会比 1000 个“小”查询快得多。
1 实际上,如果您的 DBMS 可以并行执行查询,则可能有利于大查询。
关于database - 针对 1 行检查的多个 SQL 查询与针对多行检查的 1 个查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16368287/