Если запрос выбирает только поля из индекса (или если в таблице нет других полей) по составному WHERE ... IN
, будет использоваться индекс:
SELECT a,b FROM `table` WHERE (a, b) IN ((1,2), (2,4), (1,3))
В противном случае он не будет использоваться.
Обходной путь должен использовать производный запрос:
SELECT t.* FROM (SELECT a, b FROM `table` WHERE (a, b) IN ((1,2), (2,4), (1,3))) AS o INNER JOIN `table` AS t ON (t.a = o.a AND t.b = o.b)
ОБЪЯСНИТЬ ВЫБОР:
id select_type table type possible_keys key key_len ref rows Extra
1 PRIMARY <derived2> ALL NULL NULL NULL NULL 2
1 PRIMARY t eq_ref PRIMARY PRIMARY 2 o.a,o.b 1
2 DERIVED table index NULL PRIMARY 2 NULL 6 Using where; Using index