MySQL存在性能不佳而不存在查询

时间:2014-04-20 17:11:10

标签: php mysql performance join exists

我现在有一个正在制作的应用程序,它使MySQL查询选择一个表中没有另一个表中的关联行的列为此,我目前正在使用一个MySQL存在的查询,它似乎变慢了添加的结果越多越慢。

这是当前查询的一个示例:

SELECT m.ig_media_id, m.media_promotion_id FROM media_promotions m
WHERE m.likes_received < m.likes_requested 
AND m.user_id != 19 
AND m.active = 1
AND NOT EXISTS 
    (SELECT * from media_actions m_a WHERE m_a.user_id = 19 AND m_a.ig_media_id = m.ig_media_id)
ORDER BY m.created_at ASC
LIMIT 1

我该怎么做才能加快速度?它目前运行时间约为3秒,并且确实减慢了我的应用程序。

1 个答案:

答案 0 :(得分:0)

这是子查询:

NOT EXISTS (SELECT *
            from media_actions m_a
            WHERE m.user_id = 19 AND m_a.ig_media_id = m.ig_media_id
           )

您可以使用索引加快速度:

create index idx_media_actions on media_actions(ig_media_id, user_id)

您也可以将其命名为:

NOT EXISTS (SELECT 1
            from media_actions m_a
            WHERE m.user_id = 19 AND m_a.ig_media_id = m.ig_media_id
           )

但是,我认为MySQL非常聪明,可以忽略这个子查询中的*