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

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

问题描述:

我有一个场景,我需要检查10,000个不同的特定名称,并对照大约60,000个记录名称的表格。假设缓存不相关,一般来说,出于性能目的,它是更好的:一个巨大的SQL语句或许多小型SQL语句?

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

(2)收件10,000一个mongocious SQL语句 “OR” 的条款?

+6

你错过了第3号:完全以另一种方式完成。我会将列表写入单独的表/临时表或其他内容,然后使用连接进行过滤。 – 2012-08-15 22:48:11

+0

@JonEgerton发布它作为答案? – kapa 2012-08-15 22:54:27

+1

@bažmegakapa:现在有。 – 2012-08-15 22:57:29

你错过了3号:自己完全是另一种方式:

我会写列表,以一个单独的表/临时表什么的,然后用join/exists或任何过滤。

+1

+1 - 绝对是我的首选方式。考虑到大多数(所有)RDBMS具有“负载”实用程序,这也可能是最快的方式。 – 2012-08-15 22:59:00

+1

+1在临时表中执行速度要快得多 – MMeah 2012-08-15 22:59:37

+0

可能唯一一次这样做不好,但如果名称在每个请求中完全更改,那么这可能不会奏效。这意味着删除表格,重新创建表格,插入记录,然后每次创建'JOIN'。 – rid 2012-08-15 23:02:27

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

所以一个解决方案是编写一个存储过程并在循环中完成。

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

或#4 - 批量使用IN()查询。关于1000通常工作得很好:

SELECT * FROM表WHERE名称( 'STR1', 'str2的', 'STR3',...)

它并不完美,但有没有涉及临时表, MySQL对于优化IN()很不错。