代码之家  ›  专栏  ›  技术社区  ›  tom10271

MariaDB/MySQL:存在左连接时忽略索引提示

  •  0
  • tom10271  · 技术社区  · 6 年前

    SELECT DISTINCT
        s0_.id         AS id0,
        s0_.updated_at AS updated_at1
    FROM
        `shipment` s0_
            LEFT JOIN `order` s1_ ON s0_.order_id = s1_.id -- These line
            LEFT JOIN `address` s2_ ON s1_.shipping_address_id = s2_.id -- These line
    ORDER BY s0_.updated_at DESC
    LIMIT 20 OFFSET 0
    

    如果我删除左连接,我将使用指定的索引,为什么?有什么解决办法吗?

    这个SQL是由一个库生成的,我有有限的选项来修复它。

    这个SQL是由一个库生成的,我有有限的选项来修复它。

    这个SQL是由一个库生成的,我有有限的选项来修复它。

    左边

    1 回复  |  直到 6 年前
        1
  •  1
  •   danblack    6 年前

    左连接需要找到 order_id 在订购输出之前,对装运进行检查。

    强制索引通常是错误的,即使它可以发现一些东西。

    shipment(order_id, updated_at) 您不需要强制创建索引。

    裁判: compound indexes query optimization