我有这个表: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
对于这种情况,索引的最佳组合是什么?
我在Windows 8.1 x64上使用MySQL 5.6.14(InnoDB)。
UPDATE(仍在测试):
迄今最好使用单独的索引:IDX_CODE(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 2014-11-03 12:51:23
InnoDB,对不起,我忘了提及 – 2014-11-03 12:53:00
你的应用程序执行插入?并且LIKE查询的开头是否会出现通配符? – Strawberry 2014-11-03 13:24:46