gpt4 book ai didi

MySQL 优化 OR IN SELECT

转载 作者:行者123 更新时间:2023-11-29 19:06:31 25 4
gpt4 key购买 nike

我很难优化这样的查询,

SELECT *
FROM transactions AS t
INNER JOIN users AS u
ON u = t.user_id
WHERE (
u.id = 123
OR u.id IN (
SELECT user_id FROM users_parents AS up
WHERE up.parent_id = 123
)
)

为了简单起见,我将其归结为基本内容并更改了字段名称,因为这些字段不是英文的,因此如果存在任何语法错误,很可能就是因为这个。

查询需要返回某个(父)用户或与父用户关联的任何用户的所有交易

但是,由于使用了 IN SELECT,性能非常糟糕,在数据库的一小部分上运行此查询花了我超过 6 秒的时间,整个查询数据库需要超过 600 秒!

我读到我应该使用 JOIN,但我所有的尝试都给了我不同的查询最终结果,我认为我在语法上做错了一些事情,而且我找不到自己的逻辑/语法缺陷我花了太多时间查看它并一遍又一遍地执行/重做相同的代码。

数据库结构相当简单,

= transactions 
id|user_id|....
= users
id|....
= users_parents
id|parent_id|user_id

非常感谢您的任何意见!

最佳答案

SELECT transactions.*, users.*
FROM transactions AS t
JOIN users AS u ON u.id = t.user_id
LEFT JOIN users_parents up on up.user_id = u.id
WHERE u.id = 123 or up.parent_id = 123

ps。我假设用户到父级是n到1。(1个用户只有1个父级,不同的用户可以有相同的父级)。

关于MySQL 优化 OR IN SELECT,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43449283/

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