如果将表定义为对列具有唯一约束,那么如果我们希望对该列进行索引以进行快速查找,是否还需要在该列上定义单独的索引?
例如,给定以下表索引:
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 | |
+----------+------------+-------------------------+--------------+--------------+-----------+-------------+----------+--------+------+------------+---------+在唯一约束'uniq_constr‘的情况下,索引'I_FRONTIER_HASH_PATHQRY’是否多余?
(注意,unique约束跨越2列)
发布于 2010-11-03 20:19:33
唯一索引也是普通索引,不需要创建单独的非唯一索引。
但是,您的唯一约束包含两列(host_id, hash_pathqry),hash_pathqry在后面。
索引维护列的字典顺序,因此只在host_id的每个值中对hash_pathqry进行排序。
因此,您已有的唯一索引不会改善HASH_PATHQRY上的查找。I_FRONTIER_HASH_PATHQRY仍然是必需的。
发布于 2010-11-03 20:19:58
no -如果您指定唯一的例如用户名varbinary(32) unique not null,那么MySQL会自动添加一个唯一的索引。
https://stackoverflow.com/questions/4086946
复制相似问题