database - 针对 1 行检查的多个 SQL 查询与针对多行检查的 1 个查询

标签 database performance database-performance overhead

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

相关文章:

php - 如何使用 phpmailer 跟踪通过 smtp 发送的电子邮件?

java - Java 中的 Integer() 有多大?

sql - 为什么本地 sqlite 数据库上的此查询需要 4 分钟才能执行?

java - 打开与数据库服务器的 jdbc 连接会降低应用程序的性能吗?

mysql - 如何将多行插入到一个表中,然后使用自动递增的 ID 插入到另一个表中?数据库

Python Scraper无法在mysql数据库中保存度数符号°

database - 为什么唯一值很少的列上的索引无效?

Java:如何以极高的性能进行基于位置 (x,y) 的索引?

Actor 模型中消息传递的性能

mysql - 提高 MySQL 中存储过程的性能