У меня есть эта таблица:MySQL: определить правильные индексы
+---------------------+--------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+---------------------+--------------+------+-----+---------+----------------+
| ID | bigint(20) | NO | PRI | NULL | auto_increment |
| CODE | varchar(255) | NO | | NULL | |
| REVISION | varchar(255) | NO | | NULL | |
| NAME | varchar(255) | NO | | NULL | |
+---------------------+--------------+------+-----+---------+----------------+
сейчас, мое приложение будет выполнять эти запросы (с большей вероятностью менее вероятно):
SELECT * FROM ITEM WHERE ID = ?
SELECT * FROM ITEM WHERE CODE = ? ORDER BY REVISION DESC
SELECT * FROM ITEM WHERE CODE = ? AND REVISION = ?
SELECT * FROM ITEM WHERE CODE LIKE ? OR NAME LIKE ? ORDER BY CODE ASC, REVISION DESC
Какова наилучшая комбинация индексов для такого сценария?
Я использую MySQL 5.6.14 (InnoDB) для Windows 8.1 x64.
UPDATE (по-прежнему тестирования):
Лучшие до сих пор с использованием отдельных индексов: IDX_CODE (КОД), IDX_NAME (NAME).
mysql> describe select id, code, revision from UNIT where code like 'M0170SIGM1%' or name like 'M0170SIGM1%' ORDER BY code ASC, revision DESC;
+----+-------------+-------+-------------+-------------------+-------------------+---------+------+------+------------------------------------------------------------------+
| id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra |
+----+-------------+-------+-------------+-------------------+-------------------+---------+------+------+------------------------------------------------------------------+
| 1 | SIMPLE | UNIT | index_merge | IDX_CODE,IDX_NAME | IDX_CODE,IDX_NAME | 767,767 | NULL | 31 | Using sort_union(IDX_CODE,IDX_NAME); Using where; Using filesort |
+----+-------------+-------+-------------+-------------------+-------------------+---------+------+------+------------------------------------------------------------------+
Невозможно заставить MySQL использовать индексы в сортировке по двойному направлению.
и что у вас двигатель innodb, myisam, архив или какая-либо другая вещь – gvgvgvijayan
InnoDB, извините, я забыл упомянуть –
Выполняет ли ваше приложение вставки? И может ли подстановочный знак появляться в начале запроса LIKE? – Strawberry