我,而從2個表執行選擇發現了一些奇怪:MySQL查詢選擇使用子選擇的時間太長
SELECT * FROM table_1 WHERE id IN (
SELECT id_element FROM table_2 WHERE column_2=3103);
這個查詢近似242秒了。
但是,當我執行的子查詢
SELECT id_element FROM table_2 WHERE column_2=3103
用了不到0.002s(並導致2行)。
然後,當我做
SELECT * FROM table_1 WHERE id IN (/* prev.result */)
這是同樣的:0.002s。
我想知道爲什麼MySQL正在做這樣的第一個查詢,需要比最後2個查詢分開更多的時間?它是從子查詢的結果中選擇某些內容的最佳解決方案嗎?
其他詳細信息:table_1
約有。 9000行,table_2
有90000行。
後,我從table_2
加在column_2
索引,第一個查詢了0.15秒。
內部選擇有多少結果? – Dani 2009-11-08 14:18:38
你可以發佈運行'EXPLAIN SELECT * FROM table_1 WHERE id IN(SELECT id_element FROM table_2 WHERE column_2 = 3103)''的結果。這將顯示MySQL正在使用的查詢計劃和索引。 – 2009-11-08 14:19:38
@Dani帖子指出內部查詢返回2行。 – 2009-11-08 14:20:47