我正在執行一個查詢,該查詢正在查找不在另一個表中的值。例如:MySQL查詢優化
SELECT id FROM table1 WHERE id NOT IN (SELECT id FROM table2);
兩個表都有大約100萬行,但只有幾百行與結果集中返回的值不匹配。查詢大約需要35秒。在查詢中顯示配置文件顯示mysql大部分時間處於「準備」狀態。關於如何優化這種狀態或「準備」期間實際發生的情況的任何想法?
兩個表中的id值都被編入索引,並且具有相同的類型和大小。
查詢的整個輪廓是:
+--------------------------------+----------+
| Status | Duration |
+--------------------------------+----------+
| (initialization) | 0 |
| checking query cache for query | 0 |
| Opening tables | 0.13 |
| System lock | 0 |
| Table lock | 0 |
| init | 0.01 |
| optimizing | 0 |
| statistics | 0 |
| preparing | 0 |
| executing | 0 |
| Sending data | 0 |
| optimizing | 0 |
| statistics | 0 |
| preparing | 34.83 |
| end | 0 |
| query end | 0 |
| freeing items | 0 |
| closing tables | 0 |
| logging slow query | 0 |
+--------------------------------+----------+
任何提示讚賞。
謝謝。
高興你chnaged是正確的加入到左! – 2009-12-25 02:33:54
如果這是和WHERE b.id爲空? – 2009-12-25 02:49:49
最好在where子句中指定它;但優化者應該制定相同的計劃。 – 2009-12-25 02:52:03