我现在迫使我的服务出现性能问题,因为流量很高且仍在增长。 这是我的SQL查询
SELECT *
FROM $db1
WHERE userid!='$userid'
AND media NOT IN (SELECT media
FROM $db2
WHERE uid='$userid')
ORDER BY active ASC LIMIT 60
这是非常差的优化。当db2只有几千行时,它运行良好。但现在我已经有大约100k,我甚至需要5-10才能从api服务器获得响应。我很担心,因为现在每天都有越来越多的用户,性能越来越差。请帮我优化这个查询,我不是最好的sql。
答案 0 :(得分:0)
首先,我建议使用not exists
而不是not in
重写查询。有时not exists
会更好地优化。此外,它更直观地处理NULL
值。此外,如果id
是整数,则不要使用单引号。这也会影响查询的性能:
SELECT *
FROM $db1 t
WHERE userid <> $userid AND
NOT EXISTS (select 1 FROM $db2 t2 WHERE uid = $userid and t2.media = t.media)
ORDER BY active ASC
LIMIT 6
接下来,要优化此项,您需要索引。最明显的是$db2(media, uid)
。 <{1}}或$db1(active)
上的索引可能也会有所帮助,具体取决于数据库。