powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Почему замена WHERE field = x на WHERE field in (x,y) отключает поиск по индексу?
3 сообщений из 3, страница 1 из 1
Почему замена WHERE field = x на WHERE field in (x,y) отключает поиск по индексу?
    #39381179
Ilya Evseev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Имеется MariaDB 10.1.20

Создаю таблицу:
Код: sql
1.
2.
3.
4.
5.
CREATE TABLE test2 (
   id INTEGER NOT NULL DEFAULT 0,
   flag enum('y','n') NOT NULL DEFAULT 'n',
   KEY(id), KEY(flag)
) ENGINE=InnoDB;



Так выборка по ключу работает:
Код: sql
1.
2.
3.
4.
5.
6.
> EXPLAIN SELECT * FROM test2 WHERE id = 1;
+------+-------------+-------+------+---------------+------+---------+-------+------+-------+
| id   | select_type | table | type | possible_keys | key  | key_len | ref   | rows | Extra |
+------+-------------+-------+------+---------------+------+---------+-------+------+-------+
|    1 | SIMPLE      | test2 | ref  | id            | id   | 4       | const |    1 |       |
+------+-------------+-------+------+---------------+------+---------+-------+------+-------+



А так почему-то не работает:
Код: sql
1.
2.
3.
4.
5.
6.
> EXPLAIN SELECT * FROM test2 WHERE id IN (1,2);
+------+-------------+-------+------+---------------+------+---------+------+------+-------------+
| id   | select_type | table | type | possible_keys | key  | key_len | ref  | rows | Extra       |
+------+-------------+-------+------+---------------+------+---------+------+------+-------------+
|    1 | SIMPLE      | test2 | ALL  | id            | NULL | NULL    | NULL |    1 | Using where |
+------+-------------+-------+------+---------------+------+---------+------+------+-------------+


Что ему мешает?
...
Рейтинг: 0 / 0
Почему замена WHERE field = x на WHERE field in (x,y) отключает поиск по индексу?
    #39381201
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Запросы неэквивалентны.

Код: sql
1.
EXPLAIN SELECT * FROM test2 WHERE id = 1 OR id=2;
...
Рейтинг: 0 / 0
Почему замена WHERE field = x на WHERE field in (x,y) отключает поиск по индексу?
    #39381241
Melkij
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Странно видеть что-то с названием id и не являющееся первичным ключом.
Вероятно, у вас в табличке мало данных - вот оптимизатор и решил, что ему проще пройтись последовательно seqscan'ом, чем читать индекс и потом по табличке ходить чистым random io читать значения остальных полей. Innodb же, кластеризован по первичному ключу (которого у вас нет - значит по неявно-сгенерированному ключу) и все вторичные индексы указывают на значение первичного ключа, а не самих данных.
...
Рейтинг: 0 / 0
3 сообщений из 3, страница 1 из 1
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Почему замена WHERE field = x на WHERE field in (x,y) отключает поиск по индексу?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]