首页 > 解决方案 > 查询有效,但需要很长时间才能执行

问题描述

我有一个查询,仅用于获取关注用户的谱面图。

SELECT   *,
         maps.uid,
         maps.add_time,
         maps.id as mapid
FROM     maps
  LEFT JOIN follows ON
         (follows.fid = maps.uid
          AND follows.uid = 3443963) 
WHERE follows.id IS NOT NULL
AND maps.uid != 3443963
AND add_time = (SELECT max(add_time)
                FROM maps i
                WHERE i.sid = maps.sid)
GROUP BY sid
ORDER BY maps.add_time DESC LIMIT 9

查询有效,但执行时间超过 6 秒。有什么办法让它跑得更快吗?

标签: mysql

解决方案


您需要为您在选择查询中使用的列添加索引。

示例查询:

ALTER TABLE `tablename`
ADD INDEX (`uid`);

您需要以下索引:

maps.uid, follows.fid,maps.sidmaps.add_time

查询:

ALTER TABLE `maps`
ADD INDEX (`uid`);

ALTER TABLE `maps`
ADD INDEX (`add_time`);

ALTER TABLE `maps`
ADD INDEX (`sid`);

ALTER TABLE `follows`
ADD INDEX (`fid`);

推荐阅读