两个内连接导致执行缓慢

时间:2013-11-21 00:21:00

标签: mysql sql performance query-performance

我的SQL查询中有两个内部联接:

SELECT `M`.`msg_id`,
       `U`.`username`,
       `U`.`seo_username`
FROM `newdb2`.`users` AS `U`
INNER JOIN (SELECT subscriber_to_id
            FROM subscriptions
            WHERE subscriber_id = 434) AS subscriber 
  ON id = subscriber_to_id
INNER JOIN `newdb2`.`messages` AS `M` 
  ON (`M`.`uid_fk` = `U`.`id`)
ORDER BY id DESC LIMIT 10

当我执行此查询时,我发现这很慢。 如何修改thiş查询以使其更快?

1 个答案:

答案 0 :(得分:0)

对此类内容的快速修复是添加索引,这些索引允许您的数据库服务器快速查找您正在搜索的列。 For more info on how to add indexes to columns, see the manual

在此查询中,这些列为:

  • subscriptions.subscriber_id
  • subscriptions.subscriber_to_id
  • users.id
  • messages.uid_fk

ORDER BY id应该没问题,因为我假设您的id列已经有一个主键索引,但排序查询也会降低它的速度。

子选择查询也会降低查询速度。在此特定查询中,我看不到在任何地方使用的别名subscriber(包含您的子查询的结果,inner join),因此请完全删除该连接。