gpt4 book ai didi

如果主 ID 的给定值为 0,则 LEFT JOIN 中的 MySQL 查询速度非常慢

转载 作者:行者123 更新时间:2023-11-29 14:49:28 33 4
gpt4 key购买 nike

在此sql中:

    SELECT s.*,
u.id,
u.name
FROM shops s
LEFT JOIN users u ON u.id = s.user_id
OR u.id = s.owner_user_id
WHERE s.status = 1

由于某种原因,这个查询花费了惊人的时间。虽然 id 是主键。尤其是在我添加这部分OR u.id=s.owner_user_id之后,查询变得很慢。 owner_user_id 通常只有少数几次为 0。但为什么显然要花这么长时间扫描整个表呢?数据库表users非常长而且大。我没有设计它。这是针对后续程序员添加了太多字段的客户的。该表有 22k 行和数十个字段。

*字段名称仅供演示。实际名称是不同的,所以不要问我为什么要寻找owner_user_id(;我确实通过删除“OR ...”部分解决了速度慢的问题,而是在循环中搜索id(如果它不为0)。但我想知道为什么会发生这种情况以及如何加速该查询。

最佳答案

您可以通过使用 IN 而不是 OR 来加快速度,但这只是次要的。

SELECT u.id,
u.name
FROM shops s
LEFT JOIN users u ON u.id IN ( s.user_id, s.owner_user_id )
WHERE s.status = 1

首先这个表有索引吗?主要是user.id字段还是s.user_id或s.owner_user_id?

但是,我必须问为什么您需要使用 LEFT JOIN 而不是常规联接。 LEFT JOIN 导致每一行与其他每一行匹配。由于我假设值/id 应该位于 user_id 或 Owner_user_id 字段中,并且总是存在匹配项,如果是这种情况,那么使用 JOIN 应该会加快查询速度。

正如 Mitch 所说,22k 行很小。

关于如果主 ID 的给定值为 0,则 LEFT JOIN 中的 MySQL 查询速度非常慢,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6105032/

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