这个非常简单的查询需要很多时间:
SELECT text, url, docid
FROM retrieve
LEFT JOIN citations2
ON citations2.fromdoc = retrieve.docid
WHERE citations2.todoc IS NULL
LIMIT 10;
它有一个带有 NULL 条件的左连接......这可能是原因吗?我到处都放了索引。
这是慢查询日志:
# Time: 130404 8:00:31
# User@Host: em[em] @ zebra [130.239.162.142]
# Query_time: 27.006579 Lock_time: 0.000019 Rows_sent: 0 Rows_examined: 90682
use em_bg04;
SET timestamp=1365055231;
SELECT text, url, docid FROM retrieve LEFT JOIN citations2 ON citations2.fromdoc = retrieve.docid WHERE citations2.todoc IS NULL LIMIT 10;
这是所涉及表的示意图,以及大小(继续向下滚动以查看EXPLAIN
查询的输出)
这是 EXPLAIN 的输出:
所以它似乎必须通过整个表......。我当然读过这个,但我无法理解它。那么,有没有办法让这个查询更快呢?