MYSQL - 优化查询以尽快进行

时间:2015-01-25 16:46:17

标签: mysql sql optimization mariadb

我现在迫使我的服务出现性能问题,因为流量很高且仍在增长。 这是我的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。

1 个答案:

答案 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)上的索引可能也会有所帮助,具体取决于数据库。