gpt4 book ai didi

mysql - JOIN 和 WHERE 子句的索引

转载 作者:行者123 更新时间:2023-11-29 10:49:47 25 4
gpt4 key购买 nike

如果我的查询如下所示:

SELECT *
FROM member
LEFT JOIN group ON (member.group_id = group.id)
WHERE group.created > @date
ORDER BY member.last_updated

如果我为以下对象创建两个索引:

member.group_id, member.last_updated
group.id, group.created

这是优化原始查询的最佳方法吗?我应该添加一个新字段 member.group_created 和索引,如下所示:

member.group_created, member.last_updated

最佳答案

SELECT  *
FROM member AS m
LEFT JOIN group AS g ON (m.group_id = g.id)
WHERE g.created > @date
ORDER BY m.last_updated
  • 如果您不需要两个表的所有 ( * ) 列,则不要询问它们;这可能会影响性能。
  • 你真的需要LEFT ?也就是你想要NULL “右”表中缺少任何行吗?
  • 如果优化器决定从 member 开始,它可能受益于 INDEX(last_updated) 。假设idPRIMARY KEY of group`,那里不需要额外的索引。
  • 如果它决定以 group 开头,然后INDEX(created) 可能有用。然后,m需求INDEX(group_id) .

因此,添加我建议的 3 个索引(如果它们尚不存在)。

如果您有更多问题,请提供SHOW CREATE TABLEEXPLAIN SELECT ...

关于mysql - JOIN 和 WHERE 子句的索引,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43949434/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com