我想做的是加快这个查询的速度。目前慢了大约 15 秒以上。 r.email 和 v.sent 以及 r.id、r.viewed 都有索引和r.saved。 EXPLAIN 显示两个键都在使用中,但是我看到它正在使用 Using where;使用临时的;使用文件排序
。
关于改进此查询有什么想法吗?
SELECT r.id, r.top, r.email
FROM request as r
WHERE r.viewed = 0 AND r.saved = 0 AND r.email NOT IN (
SELECT v.sent FROM viewing as v WHERE v.sent = r.email
)
GROUP BY r.email
ORDER BY r.top desc, r.date
LIMIT 100;
最佳答案
MySQL 在 IN
子句中为多条记录使用临时表。尝试一下
SELECT r.id, r.top, r.email
FROM request as r
left outer join viewing v on v.sent = r.email
WHERE r.viewed = 0 AND r.saved = 0 AND v.sent is null
GROUP BY r.email
ORDER BY r.top desc, r.date
LIMIT 100;
关于php - 加快 WHERE NOT IN MySQL 查询速度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12084938/