这些索引之间 SELECT 查询速度的差异:*UNIQUE(col1, col2)* vs *FK(col1), FK(col2)*
Difference for SELECT querys speed between these indexes: *UNIQUE(col1, col2)* vs *FK(col1), FK(col2)*
UNIQUE(col1, col2) vs FK(col1), FK(col2)
我目前启用了两个索引,我不太在意 de foreign relationship per sé。所以我想知道通过拥有所有这些键我是否获得了读取性能的冗余索引,或者它们在某些边缘情况下是否不同?
我知道这两列很适合作为主键,但作为一个团队,我们都决定始终将自动增量作为主键。
MySQL 想为其中的每一个创建一个单独的索引。所以你可能在 :
上有三个索引
(col1, col2)
(col1)
(col2)
我说 "might" 因为 MySQL 也试图优化自动索引创建。因此,如果第一个索引已经创建,则不需要第二个——它们是多余的。不过,第三个是必需的。
我的推荐?自动索引创建支持其他目的——对第一个索引实施唯一约束或对第二个和第三个索引实施外键约束。您希望数据库完成所有这些工作。保留 unique
和 foreign key
声明!
因此,您唯一能做的就是确保在声明外键之前知道唯一索引。在 create table
中声明它应该就足够了——但是,为了确定,我会把 unique
约束放在外键约束之前。
UNIQUE(col1, col2) vs FK(col1), FK(col2)
我目前启用了两个索引,我不太在意 de foreign relationship per sé。所以我想知道通过拥有所有这些键我是否获得了读取性能的冗余索引,或者它们在某些边缘情况下是否不同?
我知道这两列很适合作为主键,但作为一个团队,我们都决定始终将自动增量作为主键。
MySQL 想为其中的每一个创建一个单独的索引。所以你可能在 :
上有三个索引(col1, col2)
(col1)
(col2)
我说 "might" 因为 MySQL 也试图优化自动索引创建。因此,如果第一个索引已经创建,则不需要第二个——它们是多余的。不过,第三个是必需的。
我的推荐?自动索引创建支持其他目的——对第一个索引实施唯一约束或对第二个和第三个索引实施外键约束。您希望数据库完成所有这些工作。保留 unique
和 foreign key
声明!
因此,您唯一能做的就是确保在声明外键之前知道唯一索引。在 create table
中声明它应该就足够了——但是,为了确定,我会把 unique
约束放在外键约束之前。