我为帐户/用户创建了一个表,其中包含主键(UsersID,AccountsID),如下所示。我应该为Users表添加索引吗?
create table AccountsUsers ( AccountsID int unsigned not null, UsersID int unsigned not null, Roles bigint unsigned null, primary key (UsersID, AccountsID), constraint AccountsUsers_Accounts_ID_fk foreign key (AccountsID) references Accounts (ID) on update cascade on delete cascade, constraint AccountsUsers_Users_ID_fk foreign key (UsersID) references Users (ID) on update cascade on delete cascade ) engine=InnoDB ; create index AccountsUsers_Accounts_ID_fk on AccountsUsers (AccountsID) ;
答案 0 :(得分:0)
MySQL要求外键和引用键上的索引 外键检查可以很快,不需要表扫描。在里面 引用表时,必须有一个索引所在的外键 列以相同顺序列为第一列。这样的 如果不是,则会自动在引用表上创建索引 存在。如果您创建,可能会稍后以静默方式删除此索引 另一个可用于强制执行外键约束的索引。 如果给定,则使用index_name,如前所述。
换句话说,如果您的引用表(AccountsUsers
)的列上还没有必需的索引,MySQL将为您创建它们。
如果引用表(Accounts
和Users
)中的列未编入索引,则会出错。你看起来他们将成为各自桌子上的主键,所以你应该没问题。
答案 1 :(得分:0)
如有必要,MySQL将自动为外键创建必要的索引。
对于UsersId上的外键,它可以使用主键的左列。它不需要为该外键创建新索引。
对于AccountsId上的外键,MySQL将自动创建一个新索引。它不能使用AccountsId是主键的一部分,因为它不是最左边的列。
执行CREATE TABLE
后,运行SHOW CREATE TABLE AccountsUsers
,您应该会看到它为AccountsId创建的新索引。