Задавайте вопросы, мы ответим
Вы не зашли.
Страниц: 1
Есть таблица из 5-и столбцов: id, id2, type, misc и list.
Вот таким запросом выбираю значения list:
PRIMARY KEY (`id2`,`misc`,`type`),
UNIQUE KEY `id2` (`id2`,`misc`,`type`) USING BTREE,
UNIQUE KEY `id` (`id`,`misc`,`type`) USING BTREE
Вывод EXPLAIN:
+----+-------------+------------------+------+---------------+------+---------+------+------+-------------+
| id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra |
+----+-------------+------------------+------+---------------+------+---------+------+------+-------------+
| 1 | SIMPLE | ms_cllist n | ALL | id2 | NULL | NULL | NULL | 1 | Using where |
+----+-------------+------------------+------+---------------+------+---------+------+------+-------------+
1 row in set
Получается составной индекс задействовать не получается... Подскажите как для этого и подобных запросов правильно составлять индексы?
Отредактированно gif-t (10.03.2014 16:42:18)
Неактивен
К сожалению запросы с OR используют индекс только в исключительных случаях. Используйте IN:
Неактивен
Спасибо, через IN индексы заработали
Неактивен
Я ошибся, когда в WHERE передается несколько полей (`type`,`misc`), индексы не работают . Выборка же через AND
Неактивен
А есть индекс (`misc`,`type`)?
Неактивен
Да, попробовал все комбинации индексов, IN не работает, видимо Percona 5.6.14-62.0 не поддерживает. Но заработало с комбинацией (... AND ... AND ...) OR (... AND ... AND ...) OR .., т.е. достаточно было избавиться от множественных OR
Неактивен
Такой IN будет работать с индексом в MySQL 5.7. См. доклад Дмитрия Ленева на Moscow Mysql user group:
https://groups.google.com/d/msg/moscow- … MjvK9BHVwJ
Неактивен
Страниц: 1