我很好奇,有什么更好的表现。关于上下文的一点点:我正在处理需要输入数据库表的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是重复的性能
答案 0 :(得分:1)
RDBMSes针对集合操作进行了优化,因此恕我直言,与进行1000次调用相比,进行一次处理整个数据集的调用总是更好(更快)。
答案 1 :(得分:1)
我赞成b,因为它进行了1次DB调用
你的直觉是正确的。
然后,由于第二次调用正在检查整个数据库表是否存在多个记录,我不太相信。
两种方法都在搜索完全相同的行,因此 1 没有区别。不同之处在于,对于第一种方法,数据库往返的价格将按行每行支付,而第二种方法只支付一次,无论行数是多少。
我真正感兴趣的是对数据库进行1000次调用以检查是否存在uniqueColumn值与对数据库进行1次调用以检查哪些uniqueColumns是重复项的性能。
我建议您测量精确结果,但我希望1“大”查询会比1000次“小”查询快得多。
1 实际上,如果您的DBMS可以并行化查询执行,那么可能有利于大查询。