MySQL优化或选择
我很难优化这样的查询MySQL优化或选择,mysql,subquery,Mysql,Subquery,我很难优化这样的查询 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 ) ) 我已经将其归结为基本问题,并更改了字段名称以简化,因为字段不是英文的,所以如果有任何语法错误
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
)
)
我已经将其归结为基本问题,并更改了字段名称以简化,因为字段不是英文的,所以如果有任何语法错误,很可能就是因为这个原因
查询需要返回来自某个(父)用户或与父用户关联的任何用户的所有事务
但是,由于在SELECT中使用了,性能非常糟糕,在数据库的一小部分上运行此查询需要6秒以上,整个查询数据库需要600秒以上
我已经读到我应该使用连接,但我所有的尝试都给了我不同的查询最终结果,我认为我一直在做一些语法错误的事情,我找不到自己的逻辑/语法缺陷,因为我已经花了太多的时间看它,一遍又一遍地做/重做相同的代码
数据库结构比较简单,
= 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
注:我假设用户对父项是n对1。(1个用户只有1个父项,不同的用户可以有相同的父项)。不确定它如何运行而没有错误,但连接条件是否应该不是u.id=t.user\u id上的
,而不是u=t.user\u id上的?@DarshanMehta-绝对,“我一定是在重写它的时候重写了它。@Zjahn很乐意帮忙。”