gpt4 book ai didi

checkin 解释计划时使用 JOIN TYPE 'ALL' 的 MYSQL

转载 作者:太空宇宙 更新时间:2023-11-03 11:42:56 24 4
gpt4 key购买 nike

查询如下,

select *
from lab this_
inner join visits v1_ on this_.visit_id=v1_.id

v1_.id 是查询中的主键。

完成需要超过 1 分钟。

下面是计划。

id   select_type   table   type  possible_keys  key       
1 SIMPLE v1_ ALL <null> <null>
1 SIMPLE this_ ALL <null> <null>

不确定为什么选择主键作为键。类型也是ALL。

最佳答案

如果 Mysql 认为替代计划更有效,它可能会在执行查询期间忽略索引。它考虑了几点:

  1. 表格的大小。如果访问表很小,那么使用索引就没有太大意义。

  2. 选择性。您确实加入了 2 个表,但是没有过滤,您需要两个表中的所有字段。这可能意味着 mysql 无论如何都必须从 visits 表中返回大部分记录,并且索引仅覆盖 id 列。因此,无论如何,mysql 将被迫扫描 visits 表的大部分记录以返回数据,因此使用索引并没有太多好处。

  3. 连接另一端字段的索引。您没有提及 labs.visit_id 字段是否已编入索引。如果不是,那么再次使用访问表的 pk 获得的 yield 会更少。

产生结果的速度不取决于使用的索引,它还取决于结果集的大小(包括记录和字段数)、mysql 配置和底层系统的整体性能。不过,如果您认为 mysql 应该使用 visits 表的 pk,则使用 index hint。在查询中强调应该使用索引。如果 mysql 受到索引提示的影响,您可以使用 explain 检查。

关于 checkin 解释计划时使用 JOIN TYPE 'ALL' 的 MYSQL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40516386/

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