mysql - 查询有效,但需要很长时间才能执行
问题描述
我有一个查询,仅用于获取关注用户的谱面图。
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 秒。有什么办法让它跑得更快吗?
解决方案
您需要为您在选择查询中使用的列添加索引。
示例查询:
ALTER TABLE `tablename`
ADD INDEX (`uid`);
您需要以下索引:
maps.uid
, follows.fid
,maps.sid
和maps.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`);
推荐阅读
- python - 尝试将 html 标记的文本写入 .txt 文件时出错 - Python
- jquery - 如何触发对动态添加的元素的点击
- sql - 有时缺少数据时的行到列
- docker - 为什么 Logstash 不使用 gelf 的日志?
- erlang - Erlang OTP 21 如何禁用记录器控制台输出
- vaadin - 在 Vaadin 13 中,如何让椭圆出现在网格单元的左侧而不是右侧?
- php - 使用数组使用 jQuery、PHP 和 MySQL 插入多行
- mfc - 如何检查文件是否在 MFC 中被锁定?
- amazon-web-services - Cognito 上的自定义域
- wordpress - 我的联系表格 7 中的动态文本现在不起作用