我有一個查詢,通過加入3個大表(每個〜1mm記錄)獲取數據,此外他們是非常繁忙的表。mysql在子句和大表連接
做傳統的加入比較好嗎?或者首先從第一個表中獲取值,然後執行第二個查詢來傳遞檢索到的值,如逗號分隔的子句中那樣?
選項#1
SELECT *
FROM BigTable1 a
INNER JOIN BigTable2 b using(someField2)
INNER JOIN BigTable3 c using(someField3)
WHERE a.someField1 = 'value'
VS
選項#2
$values = SELECT someField2 FROM WHERE someField1 = 'value'; #(~20-200 values)
SELECT *
FROM BigTable2
INNER JOIN BigTable3 c using(someField1)
WHERE someField2 in ($values)
選項#3
創建臨時表將這些值從BigTable1 存儲和使用這而不是直接加入BigTable1
還有其他的選擇嗎?
什麼單位是毫米?百萬?數百萬?謝謝... –
取決於行和基數的大小。 –
您也可以針對子查詢結果進行連接,但mysql的查詢優化器可能會或可能不會那樣做。在查詢中使用'EXPLAIN',看看哪一個看起來更好。例如:'SELECT * FROM table1 INNER JOIN(SELECT somefield2 FROM table2 WHERE somefield1 ='value')as b on table1.f1 = b.f2' –