相关疑难解决方法(0)

当条件之间存在OR时,MySQL能否使用索引?

我有两个查询加上自己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更好.如果我使用哪种方法,请你帮助我吗?

mysql sql

6
推荐指数
2
解决办法
298
查看次数

标签 统计

mysql ×1

sql ×1