据我了解,它应该很简单,colA='X' 还是 ColB='X',如果其中任何一个为真,则返回结果,否则不返回。
TableA
╔════╦═══╦═══╦═══╦═══╗
║ id ║ A ║ B ║ C ║ D ║
╠════╬═══╬═══╬═══╬═══╣
║ 1 ║ x ║ x ║ x ║ x ║
║ 2 ║ x ║ x ║ x ║ x ║
║ 3 ║ x ║ x ║ x ║ x ║
╚════╩═══╩═══╩═══╩═══╝
TableB
╔════╦═══╗
║ id ║ A ║
╠════╬═══╣
║ 1 ║ x ║
║ 2 ║ x ║
║ 3 ║ x ║
╚════╩═══╝
select T2.ID from tableA T1
JOIN TableB T2
ON T1.A=T2.A OR T1.B=T2.A OR T1.C=T2.A OR T1.D=T2.A /* **takes 6+ min** */
这个简单的连接需要 6 分钟以上。如果我只使用一个字段加入,那么它很快。此外,如果我编写 4 个不同的查询,每个 OR 一个,然后联合结果,它也非常快。
我的问题是,SQL OR Query 是如何工作的?它是否适用于当前行,是否执行所有 ORING 并移至下一个,或者它是否为每个 OR执行两个表的完整OR 。即使这样,只要单独的查询足够快,它也应该花费很长时间。我认为内部优化器可以非常快速地优化这一点:我将一张表的一列与第二张表的 4 列进行比较。它应该很容易优化。为什么需要这么长时间?有没有办法手动优化这个查询。顺便说一句,我尝试将 = 更改为 != 或 Or 更改为 AND,但这需要相同的时间。