如果一个表被定义为对某一列有唯一约束,那么如果我们希望该列能够建立索引以便快速查找,是否还需要在该列上定义一个单独的索引?
例如,给定以下表索引:
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 列)
最佳答案
唯一索引也是一种普通索引,无需创建单独的非唯一索引。
但是,您的唯一约束涵盖两列(host_id, hash_pathqry)
,hash_pathqry
位于尾随。
索引维护列的字典顺序,因此 hash_pathqry
仅在 host_id
的每个单个值内排序。
因此,您已有的唯一索引不会改善 HASH_PATHQRY
上的查找。 I_FRONTIER_HASH_PATHQRY
仍然是必需的。
关于sql - MySql - 如果列上的索引被定义为唯一,它是否是多余的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4086946/