2011-03-15 56 views
6

我必须使其中一个外键唯一。问题是,我从phpMyAdmin的得到以下信息:MySQL - 唯一外键

 
The following indexes appear to be equal and one of them should be removed: consignmentnumber_id_UNIQUE, fk_consignments_consignmentnumbers2 

所以我的问题是这样的:我应该打扰?没有这样的指标真的很重要吗?

回答

13

每个带有键(主键,外键)的列都需要一个索引。相同的列是唯一的。您可能创建了两个索引(一个是创建FK时创建的,另一个是唯一约束)。如果是这种情况,只需放下其中一个索引即可。

数据库维护两个等效索引是开销。

+0

你可以添加,在M中创建一个FOREIGN KEY除非已经存在,否则ySQL实际上会在引用列和引用列上创建INDEX。 – Romain 2011-03-15 13:08:10

+0

所以你说我可以删除UNIQUE索引,而列会保持UNIQUE?我通过在MySQL Workbench中检查“Unique”来添加这个索引。 – Cleankod 2011-03-15 16:23:37

+4

目前我猜你有2个INDEX和UNIQUE类型的索引。如果是这种情况,您应该删除INDEX。 UNIQUE是独一无二的,对FK来说是足够的。 – 2011-03-15 17:44:27

0

只要你知道,好像你还可以有独特的外键:

CREATE TABLE user(
uid INT NOT NULL AUTO_INCREMENT, 
username VARCHAR(16) NOT NULL UNIQUE, 
email_id INT NOT NULL UNIQUE, 
FOREIGN KEY (email_id) REFERENCES email(uid) 
    ON DELETE CASCADE 
    ON UPDATE CASCADE, 

PRIMARY KEY (uid)); 
2

对于未来,如果你想使你的外键独特的,你可以简单地修改你的外键列如下:

ALTER TABLE your_table 
MODIFY COLUMN your_fk_column [INT, VARCHAR etc.][NOT NULL] UNIQUE;