У меня есть таблица MySQL с составным первичным ключом: (id1, id2). Я хочу получить все строки, где (id1, id2) среди списка пар, например. ((1,2), (2,6), (1,6)). Когда этот список пар содержит только один элемент, кажется, что индекс используется, поскольку запрос выполняется очень быстро. Если список пар содержит более одного элемента, запрос выполняется крайне медленно:
mysql> SELECT id1, id2 FROM my_table WHERE (id1, id2) in ((1817279, 0));
+---------+--------+
| id1 | id2 |
+---------+--------+
| 1817279 | 0 |
+---------+--------+
1 row in set (0.00 sec)
mysql> SELECT id1, id2 FROM my_table WHERE (id1, id2) in ((1819781, 2));
+---------+--------+
| id1 | id2 |
+---------+--------+
| 1819781 | 2 |
+---------+--------+
1 row in set (0.00 sec)
mysql> SELECT id1, id2 FROM my_table WHERE (id1, id2) in ((1817279, 0), (1819781, 2));
+---------+--------+
| id1 | id2 |
+---------+--------+
| 1817279 | 0 |
| 1819781 | 2 |
+---------+--------+
2 rows in set (1 min 22.72 sec)
Я попытался использовать FORCE INDEX (PRIMARY)
безуспешно. Есть идеи, почему MySQL не может использовать индекс?
Вот моя версия MySQL: mysql Ver 14.14 Distrib 5.6.33, for debian-linux-gnu (x86_64) using EditLine wrapper