我创建了一个带有主键(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) ;
如果需要,MySQL会自动为外键创建必要的索引。
对于UsersId上的外键,它可以使用主键的左列。它不需要为该外键创建新的索引。
如果您的外键在AccountsId上,MySQL将自动创建一个新索引。它不能利用AccountsId是主键的一部分这一事实,因为它不是最左边的列。
执行CREATE TABLE
之后,运行show CREATE TABLE accountsusers
,您应该会看到它为AccountSID创建的新索引。
从文档中
MySQL需要对外键和引用键进行索引,这样外键检查就可以快速进行,而不需要进行表扫描。在引用表中,必须有一个索引,其中外键列按相同顺序作为第一列列出。如果引用表不存在,则自动在该表上创建这样的索引。如果您创建了另一个可用于强制外键约束的索引,则该索引可能会在以后被无人值守地删除。如果给定了index_name,则按前面所述使用。
换句话说,如果在引用表(accountsusers
)的列上还没有所需的索引,MySQL将为您创建它们。
如果引用的表(accounts
和users
)中的列没有被索引,则会出现错误。你的看起来他们将是主键在他们各自的表上,所以你应该没事。
本文向大家介绍MySQL索引之主键索引,包括了MySQL索引之主键索引的使用技巧和注意事项,需要的朋友参考一下 在MySQL里,主键索引和辅助索引分别是什么意思,有什么区别? 上次的分享我们介绍了聚集索引和非聚集索引的区别,本次我们继续介绍主键索引和辅助索引的区别。 1、主键索引 主键索引,简称主键,原文是PRIMARY KEY,由一个或多个列组成,用于唯一性标识数据表中的某一条记录。一个表可以没
问题内容: MySQL是否自动索引外键列? 问题答案: 是的,但仅在innodb上。Innodb是当前唯一实现了外键的表格式。
本文向大家介绍主键、外键和索引的区别?相关面试题,主要包含被问及主键、外键和索引的区别?时的应答技巧和注意事项,需要的朋友参考一下 主键、外键和索引的区别 定义: 主键–唯一标识一条记录,不能有重复的,不允许为空 外键–表的外键是另一表的主键, 外键可以有重复的, 可以是空值 索引–该字段没有重复值,但可以有一个空值 作用: 主键–用来保证数据完整性 外键–用来和其他表建立联系用的 索引–是提高查
问题内容: 经过搜索,没有找到这个特定的菜鸟问题的答案。如果我错过了,我深表歉意。 在MySQL数据库中,我有一个带有以下主键的表 主键ID(发票,项目) 在我的应用程序中,我也会经常自己选择“项目”,而很少选择“发票”。我假设我将从这些列的索引中受益。 当我定义以下内容时,MySQL不会抱怨: 索引(发票),索引(项目),主键ID(发票,项目) 但是,我没有看到任何证据(使用DESCRIBE-我
我在model和model之间有一个关系。这意味着每个用户都有0或1个总统设置。因此,表的主索引与外键相同。 这就是我想要添加外键的方式: 但是我得到以下错误: 我怎么才能修好它?我使用InnoDB引擎,所以我知道我可以设置索引键为外键。
问题内容: 每个外键上的索引都会优化查询吗? 问题答案: 通常,将索引放在外键上被认为是一种好习惯。b / c完成此操作,将FK表链接到包含键定义的表时,有助于提高连接性能。 这并不能神奇地优化您的整个查询,但是绝对可以帮助改善FK及其主键对等部分之间的联接性能。