如何优化大表左连接查询

时间:2015-10-09 12:49:59

标签: mysql

我正在尝试从 table1 中选择一些不在 table2 中的项目。 table1 有大约300万行,而 table2 大约有8,000行。我已经在 table1 上有一个索引(expire,unreliable,block,deleted,flag,expirationDate)。我该如何优化这个:

SELECT table1.*
FROM table1
LEFT JOIN table2
ON table1.item_ID = table2.item_ID
WHERE table1.expire = '0'
AND table1.unreliable = '0'
AND table1.block = '0'
AND table1.deleted = '0'
AND table1.flag = '0'
AND table1.expirationDate >= CURDATE() 
AND table2.item_ID IS NULL
GROUP BY item_ID
LIMIT 5000

1 个答案:

答案 0 :(得分:2)

添加其他索引table2.item_id。此索引对于优化LEFT JOIN非常重要。

想象一下,你有两个不同的电话簿。您正在搜索所有以" T"开头的人(A WHERE部分)在A书中。这很快,因为你有一个索引。但是对于每个电话号码,您必须扫描整本书B,试图在那里找到相同的电话号码。使用索引(书B中所有电话号码的排序列表),这要快得多......