如果一个表被定义为对列具有唯一约束,那么如果我们希望将其索引为快速查找的索引,是否还需要在该列上定义单独的索引?MySql - 如果一列中的索引被定义为唯一的,它是否是冗余索引?
例如,如下表索引:
mysql> show index from FRONTIER;
+----------+------------+-------------------------+--------------+--------------+-----------+-------------+----------+--------+------+-------------+---------+
| Table | Non_unique | Key_name | Seq_in_index | Column_name | Collation | Cardinality | Sub_part | Packed | Null | Index_type | Comment |
+----------+------------+-------------------------+--------------+--------------+-----------+-------------+----------+--------+------+------------+---------+
| FRONTIER | 0 | PRIMARY | 1 | ID | A | 0 | NULL | NULL | | BTREE | |
| FRONTIER | 0 | uniq_cnstr | 1 | HOST_ID | A | 0 | NULL | NULL | | BTREE | |
| FRONTIER | 0 | uniq_cnstr | 2 | HASH_PATHQRY | A | 0 | NULL | NULL | | BTREE | |
| FRONTIER | 1 | I_FRONTIER_HASH_PATHQRY | 1 | HASH_PATHQRY | A | 0 | NULL | NULL | | BTREE | |
+----------+------------+-------------------------+--------------+--------------+-----------+-------------+----------+--------+------+------------+---------+
是索引 'I_FRONTIER_HASH_PATHQRY' 多余,唯一约束 'uniq_constr'?
(注意,唯一约束跨越2列)
即使唯一索引跨越两列吗? – Joel 2010-11-03 12:21:23
@Joel:如果该列是领先的,则不必创建单独的索引。但是,它仍在拖尾,所以你仍然必须这样做。 – Quassnoi 2010-11-03 12:22:31
谢谢,所以如果我理解正确,如果在唯一约束中的两列的顺序是颠倒的,那么在'前导'列'I_FRONTIER_HASH_PATHQRY'上不需要额外的索引? – Joel 2010-11-03 12:24:26