如果我有表里面Foo
列a
,我创建一个新表Bar
与列b
这是一个外键Foo.a
,自动编入索引的Bar
列b
,或必须我还是当我在Bar.b
创建索引想要高效搜索Bar
中的所有行与b = 1
?创建外键是否意味着创建索引?
(如果有问题,我正在使用SQLite。)
如果我有表里面Foo
列a
,我创建一个新表Bar
与列b
这是一个外键Foo.a
,自动编入索引的Bar
列b
,或必须我还是当我在Bar.b
创建索引想要高效搜索Bar
中的所有行与b = 1
?创建外键是否意味着创建索引?
(如果有问题,我正在使用SQLite。)
外键仅用于'force exists relationships between tables',但不会根据其相关列索引自动编制索引。索引Foo.a
将加速在Bar.b
上的插入/更新,而索引Bar.b
将加速在Bar.b
上的选择。
您必须自己创建索引。至少我知道没有自动执行它的DBMS。
我误解了这个问题。我以为他在问是否会在FK的目标上创建一个索引。 :)(或者现在我再读一次,也许我没有误读它......我不知道,我应该去睡觉。无论如何,MySQL做这件事并不意味着它是必需的,只是意味着它是一个小方面的说明[仅限InnoDB,这是因为MyISAM不支持外键]) – Corbin 2013-02-26 22:03:13