我有一个非常简单的嵌套查询,调用它时需要 90% 以上的 CPU,我似乎无法弄清楚原因。
SELECT * FROM `push_log`
WHERE push_id IN
(SELECT `push_id` FROM push_sent_log
WHERE player_id='".$player_id."'
OR push_group='All'
AND `timestamp` >= DATE_SUB(CURDATE(), INTERVAL 24 hour) )
ORDER BY timestamp DESC"
所有查询的字段都有索引。有没有更有效的方法来做到这一点?
最佳答案
尝试删除子查询而不是 join
:
SELECT p.*
FROM push_sent_log ps
JOIN `push_log` p ON p.push_id= ps.push_id
WHERE ps.player_id='".$player_id."'
OR ps.push_group='All'
AND `ps.timestamp` >= DATE_SUB(CURDATE(), INTERVAL 24 hour) )
ORDER BY p.timestamp DESC"
我还认为你需要检查你的 sql 中的 where
,这似乎没有意义,因为它们处于同一级别:
WHERE ps.player_id='".$player_id."'
OR ps.push_group='All'
AND `ps.timestamp` >= DATE_SUB(CURDATE(), INTERVAL 24 hour) -- why do you using OR and AND at the same time?
关于mysql - 资源密集型 MySQL 嵌套选择,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49924320/