【发布时间】:2021-11-12 06:54:10
【问题描述】:
当我使用 '!=' 或 '' 进行查询时,我知道 DBMS 不使用索引。
select * from test where test_id != 1234
所以像底部一样查询,使用索引可以得到相同的结果。
select * from test where test_id < 1234 or test_id > 1234
但是当我看到解释计划时都使用范围(范围扫描)。 所以我很好奇,如果我使用 '!=' 进行查询,MySql DBMS 是否会将查询更改为 '> 和
【问题讨论】:
-
查询选择了大部分行——在这种情况下索引使用无效,优先使用表扫描。
-
有很多因素会影响索引的使用。你不会得到一个人为的简单案例的答案,这将在实际情况下对你有所帮助。如果你有一个你关心的真实案例,请询问。
-
test_id < 1234 and test_id > 1234总是错误的!你到底是什么意思?也许OR而不是AND? -
Opps...它的 OR...