【发布时间】:2021-12-08 11:17:07
【问题描述】:
我对有很多行的表有一个 SQL 查询。所以这个查询运行了很长时间。如何优化此查询? 这些表已经在 id 和friend_id 上有索引
SELECT u.id, u.first, u.last,
group_concat(u2.first, " " , u2.last) MyFriends
FROM Users u
INNER JOIN Friends f ON f.user_id = u.id
INNER JOIN Users u2 ON u2.id = f.friend_id
GROUP BY u.id;
这些是表结构:
CREATE TABLE Users (
id int(10) unsigned NOT NULL,
first varchar(50) DEFAULT NULL,
last varchar(50) DEFAULT NULL,
city varchar(20) DEFAULT NULL,
country varchar(20) DEFAULT NULL,
Age tinyint(3) unsigned NOT NULL,
KEY users_idx_id (id))
ENGINE=InnoDB DEFAULT CHARSET=latin1;
CREATE TABLE Friends (
user_id int(10) unsigned NOT NULL,
friend_id int(10) unsigned NOT NULL,
KEY idx_friends (friend_id))
ENGINE=InnoDB DEFAULT CHARSET=latin1;
【问题讨论】:
-
你必须向我们提供执行计划,也许还有索引定义
-
同时在friends表中的user_id上创建一个索引。
-
@eshirvana 我不知道如何提供执行计划。
-
Users中有id索引,Friends中有friend_id索引
标签: mysql sql query-optimization