Предположим, у меня есть таблица A с первичным ключом
PRIMARY KEY(c1,c2)
, а количество элементов c1 очень мало, а c2 очень велико
При выполнении следующих запросов
select *
from A
where (c1, c2) in (('001', 'aaa'))
select *
from A
where c1 = '001'and c2 = 'aaa'
оптимизатор использует индекс.
Однако для следующих случаев
Случай 1:
select *
from A
where (c1, c2) in (('001', 'aaa'), ('002', 'bbb'), ('003', 'ccc'))
Случай 2:
select *
from A
where (c1 = '001'and c2 = 'aaa') or
(c1 = '002'and c2 = 'bbb') or
(c1 = '003'and c2 = 'ccc')
оптимизатор прекращает использовать индекс для случая 1, но все еще использует для случая 2.
Что заставляет оптимизатор прекратить использование индекса для дела 1?
*MySQL Версия: 5.6.10