Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/63.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
MySQL优化或选择_Mysql_Subquery - Fatal编程技术网

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很乐意帮忙。”