gpt4 book ai didi

mysql - 在 LEFT JOIN 中有效地使用 OR 语句

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

所以我有这个问题

SELECT * FROM b 
LEFT JOIN n ON b.id = n.id
LEFT JOIN nr ON (b.pid <> 0 AND b.pid = nr.vid)
OR (b.pid = 0 AND n.vid = nr.vid)

但是对该查询的 EXPLAIN 语句会显示,为了在连接中执行 OR,它需要搜索 nr 表中的所有条目,即使 nr.vid 是该表的主键并且有b.pid 和 n.vid 上的索引..

关于如何提高效率的任何建议?

解释结果

1, 'SIMPLE', 'b', 'ref', 'PRIMARY,r_rID', 'r_rID', '197', 'const,const', 48, 'Using where; Using temporary; Using filesort'
1, 'SIMPLE', 'n', 'eq_ref', 'PRIMARY,nst,nnc,ut,uid', 'PRIMARY', '4', 'b.nid', 1, 'Using where'
1, 'SIMPLE', 'nr', 'ALL', '', '', '', '', 335654, ''
1, 'SIMPLE', 'tn', 'ref', 'nid', 'nid', '4', 'n.nid', 1, ''

最佳答案

我不确定,但它可能有用:

SELECT * FROM b 
LEFT JOIN n ON b.id = n.id
LEFT JOIN nr as nr1 ON b.pid <> 0 AND b.pid = nr1.vid
LEFT JOIN nr as nr2 ON b.pid = 0 AND n.vid = nr2.vid

也许,mysql 不能理解你的表达互斥。理论上,此查询应该与您的查询等效。

关于mysql - 在 LEFT JOIN 中有效地使用 OR 语句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12677054/

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