我有一个场景,我需要根据大约 60,000 条名称记录的表检查 10,000 个不同的特定名称。假设缓存不相关,一般来说,出于性能目的,最好:
(1) 分解成小查询,以便每个查询可能有 200 个不同的名称?
或者
(2) 写一条包含 10,000 个“OR”子句的 mongocious sql 语句?
我有一个场景,我需要根据大约 60,000 条名称记录的表检查 10,000 个不同的特定名称。假设缓存不相关,一般来说,出于性能目的,最好:
(1) 分解成小查询,以便每个查询可能有 200 个不同的名称?
或者
(2) 写一条包含 10,000 个“OR”子句的 mongocious sql 语句?
你错过了第 3 点:完全以另一种方式做:
我会将列表写入单独的表/临时表或其他内容,然后使用join
/exists
或其他内容进行过滤。
第一个观察结果是,通常 RDBMS 对查询字符串的大小有一个限制,如果有这么多 OR,您可能会超过这个限制。
因此,一个解决方案是编写一个存储过程并在循环中执行。
忽略这一点,考虑到情况 (1) 中的数据访问次数比情况 (2) 中的多,后一种情况更可取。
或者 #4 - 批量使用 IN() 查询。大约 1000 通常效果很好:
SELECT * FROM table WHERE name IN ('str1', 'str2', 'str3', ...)
它并不完美,但不涉及临时表,MySQL 在优化 IN() 方面做得很好。