我有一個場景,我需要檢查10,000個不同的特定名稱,並對照大約60,000個記錄名稱的表格。假設緩存不相關,一般來說,出於性能目的,它是更好的:一個巨大的SQL語句或許多小型SQL語句?
(1)分解成迷你查詢,以便每個查詢可能有200個不同的名稱?
或
(2)收件10,000一個mongocious SQL語句 「OR」 的條款?
我有一個場景,我需要檢查10,000個不同的特定名稱,並對照大約60,000個記錄名稱的表格。假設緩存不相關,一般來說,出於性能目的,它是更好的:一個巨大的SQL語句或許多小型SQL語句?
(1)分解成迷你查詢,以便每個查詢可能有200個不同的名稱?
或
(2)收件10,000一個mongocious SQL語句 「OR」 的條款?
第一個觀察結果是,通常RDBMS對查詢字符串的大小有限制,您可能會用這麼多的OR來超出查詢字符串的大小。
所以一個解決方案是編寫一個存儲過程並在循環中完成。
忽略這一點,考慮到情況(1)數據訪問次數比情況(2)多,後者更可取。
或#4 - 批量使用IN()查詢。關於1000通常工作得很好:
SELECT * FROM表WHERE名稱( 'STR1', 'str2的', 'STR3',...)
它並不完美,但有沒有涉及臨時表, MySQL對於優化IN()很不錯。
你錯過了第3號:完全以另一種方式完成。我會將列表寫入單獨的表/臨時表或其他內容,然後使用連接進行過濾。 – 2012-08-15 22:48:11
@JonEgerton發佈它作爲答案? – kapa 2012-08-15 22:54:27
@bažmegakapa:現在有。 – 2012-08-15 22:57:29