如果某个表被定义为对列具有唯一约束,是否还需要为该列定义单独的索引以进行快速查找?
例如,给定以下表索引:
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'是多余的吗?
(请注意,唯一约束跨越2列)
答案 0 :(得分:3)
唯一索引也是普通索引,不需要创建单独的非索引索引。
但是,您的唯一约束包含两列(host_id, hash_pathqry)
,hash_pathqry
正在落后。
索引维护列的词典顺序,因此hash_pathqry
仅在host_id
的每个值中排序。
因此,您已拥有的唯一索引不会改善HASH_PATHQRY
上的查找。 <{1}}仍然是必需的。
答案 1 :(得分:0)
否 - 如果指定unique,用户名varbinary(32)unique not null,则MySQL会自动添加唯一索引。