1

我有一个场景,我需要根据大约 60,000 条名称记录的表检查 10,000 个不同的特定名称。假设缓存不相关,一般来说,出于性能目的,最好:

(1) 分解成小查询,以便每个查询可能有 200 个不同的名称?

或者

(2) 写一条包含 10,000 个“OR”子句的 mongocious sql 语句?

4

3 回答 3

7

你错过了第 3 点:完全以另一种方式做:

我会将列表写入单独的表/临时表或其他内容,然后使用join/exists或其他内容进行过滤。

于 2012-08-15T22:57:11.847 回答
1

第一个观察结果是,通常 RDBMS 对查询字符串的大小有一个限制,如果有这么多 OR,您可能会超过这个限制。

因此,一个解决方案是编写一个存储过程并在循环中执行。

忽略这一点,考虑到情况 (1) 中的数据访问次数比情况 (2) 中的多,后一种情况更可取。

于 2012-08-15T22:51:45.920 回答
1

或者 #4 - 批量使用 IN() 查询。大约 1000 通常效果很好:

SELECT * FROM table WHERE name IN ('str1', 'str2', 'str3', ...)

它并不完美,但不涉及临时表,MySQL 在优化 IN() 方面做得很好。

于 2012-08-16T01:17:26.300 回答