优化某个查询
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 扫描会很糟糕。
我有一个查询是这样的:
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 扫描会很糟糕。