我执行的查询是在一个表中查找不在另一个表中的值。例如:
SELECT id FROM table1 WHERE id NOT IN (SELECT id FROM table2);
两个表都有大约100万行,但只有几百行与结果集中返回的值不匹配。查询大约需要35秒。在查询上做一个show profile显示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 |
+--------------------------------+----------+
任何小费都很感激。
谢谢。