我很难优化像这样的查询,
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
非常感谢任何输入!
答案 0 :(得分:0)
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个父对象,不同的用户可以有同一个父对象。)