优化某个查询

Optimizing a certain query

我有一个查询是这样的:

bankNumber 和 BIC 都已编入索引。

SELECT * FROM `bank1` WHERE `bankNumber` <= 200000 or `BIC` = 'Berlin'

通过使用 EXPLAIN,它使用了 possible_keys 中的两个键。我在一篇文章中读到,在查询索引时不要做的事情之一是使用 OR。

我的任务是优化此查询,以便在执行策略中只使用一个键。 这种情况怎么办?

我尝试过的事情:

显然选择了 AND,这确实给了我 EXPLAIN 想要的结果,但数据结果完全不同。

AND显然会产生不同的结果。使用索引的唯一方法是联合:

select bank1.* from (
    select id from bank1 where bankNumber <= 200000
    union distinct
    select id from bank1 where BIC='Berlin'
) ids
join bank1 on bank1.id=ids.id

但我质疑你的整个目标;查询实际上太慢了吗?您似乎没有足够的银行行,因此完整的 table 扫描会很糟糕。