我有两个查询加上自己EXPLAIN的结果:
一:
SELECT *
FROM notifications
WHERE id = 5204 OR seen = 3
Run Code Online (Sandbox Code Playgroud)
基准(10,000行):0.861
二:
SELECT h.* FROM ((SELECT n.* from notifications n WHERE id = 5204)
UNION ALL
(SELECT n.* from notifications n WHERE seen = 3)) h
Run Code Online (Sandbox Code Playgroud)
基准(10,000行):2.064
上面两个查询的结果是相同的.我在notifications桌子上也有这两个索引:
notifications(id) -- this is PK
notification(seen)
Run Code Online (Sandbox Code Playgroud)
如您所知,OR通常会阻止索引的有效使用,这就是我编写第二个查询(by UNION)的原因.但经过一些测试后,我发现使用OR它的速度要快得多UNION.所以我很困惑,我真的不能选择我的最佳选择.
基于一些合理和合理的解释,使用union更好,但基准测试的结果表明使用OR更好.如果我使用哪种方法,请你帮助我吗?