php - 加快 WHERE NOT IN MySQL 查询速度

标签 php mysql sql select

我想做的是加快这个查询的速度。目前慢了大约 15 秒以上。 r.emailv.sent 以及 r.idr.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/

相关文章:

MySQL "ANY IN"查询?

sql - HAVING 和 GROUP BY

php - Magento 中仍在使用数据库布局更新吗?

php - 使用 PHP 循环遍历 JSON 以获取子项

php - 是否有适用于 iPhone 的 PHP 和 MySQL 软件开发工具包?

mysql - 名称错误 : cannot load Java class com. mysql.jdbc.Driver

php - 将鼠标悬停在特定帖子上应仅显示该帖子的标题

php - 存储此信息的最佳方式是什么?

java - 如何在Oracle(长数据)中将长html、图像和长字符串作为单列插入?

python - 连接到 redshift : "server certificate does not match host name" 时出错