一个巨大的SQL语句或许多小的SQL语句?

时间:2012-08-15 22:46:00

标签: mysql sql database database-performance

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

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

(2)用10,000个“OR”子句写一个含糊的sql语句?

3 个答案:

答案 0 :(得分:7)

你错过了第3名:完全是另一种方式:

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

答案 1 :(得分:1)

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

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

忽略这一点,假设在情况(1)中,数据将被访问的次数多于情况(2),则后者是优选的。

答案 2 :(得分:1)

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

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

它并不完美,但没有临时表,MySQL非常适合优化IN()。