Mysql 查询可以工作,但执行起来需要很多时间

Mysql 查询可以工作,但执行起来需要很多时间,mysql,Mysql,我有一个查询,它的目的是只获取跟踪用户的beatmaps 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

我有一个查询,它的目的是只获取跟踪用户的beatmaps

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秒。有没有办法让它运行得更快?

您需要为Select查询中使用的列添加索引

查询示例:

ALTER TABLE `tablename`
ADD INDEX (`uid`);
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`);
您需要以下索引:

ALTER TABLE `tablename`
ADD INDEX (`uid`);
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`);
maps.uid
之后是.fid
maps.sid
maps.add\u time

查询:

ALTER TABLE `tablename`
ADD INDEX (`uid`);
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`);

你能显示表格结构吗?地图有id,uid,添加时间。下面有uid,fid(被跟踪的用户)您有多少行?您创建了索引吗?大约3k行,但当我只选择整个表时,它运行得又好又快。我猜是连接导致的。是的,我有索引