繁体   English   中英

优化两个表上的SQL查询

[英]Optimize SQL query on two tables

我对有很多行的表有一个 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;

多对多映射表 ( Friends ) 需要改进索引。 删除您现在拥有的所有索引并添加

PRIMARY KEY(user_id, friend_id),
INDEX(friend_id, user_id)

更多讨论: http : //mysql.rjweb.org/doc.php/index_cookbook_mysql#many_to_many_mapping_table

Age是一个移动的目标。 想一个更好的方法来存储它。

名字超过 20 个的国家大约有 6 个。“圣文森特和格林纳丁斯”是 32 个。

至于城市,“Poselok Uchebnogo Khozyaystva Srednego Professionalno-Tekhnicheskoye Uchilishche Nomer Odin”是 91 个字符。

ALTER TABLE Friends
    DROP INDEX idx_friends,
    ADD PRIMARY KEY(user_id, friend_id),
    ADD INDEX(friend_id, user_id);

每个表都应该有一个PRIMARY KEY

ALTER TABLE Users
    DROP INDEX users_idx_id,
    ADD PRIMARY KEY(user_id)

阅读有关AUTO_INCREMENT

可以通过运行EXPLAIN SELECT ...来获得“执行计划”。 然而,在这种情况下它不会提供很多线索。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM