什么应该是创建外键的最佳索引?

时间:2016-04-15 15:36:30

标签: mysql phpmyadmin

我有两个表:userscities

users               cities
------              ------
id(PK)              id(PK)
name                name
idCity(FK)

我想正确创建该外键(idCity)。我正在使用phpmyadmin所以我看到我必须这样做:

  • 在我要创建外键的表上创建索引,在本例中为users,因此我创建了一个名为idCity的索引,表示列{{1 }}

  • 我转到了idCity部分,并将该索引与表structure的{​​{1}}相关联。

但是我在第一步有些疑惑:我应该选择五个指数中的哪个?

在阅读MySQL documentation之后,我没有非常澄清我的疑虑,我搜索了SO并发现了这个问题:Differences between INDEX, PRIMARY, UNIQUE, FULLTEXT in MySQL?这让我更多地澄清了我的想法,但我仍然有一些对我必须选择的内容产生怀疑。

我对每种索引类型的看法

  • 主要:当然我不必使用它,因为我想要实现的不是主键,而是外键。

  • 索引:我无法清楚地知道这个索引是什么,但我在SO的问题上可以理解的是: index可以包含索引的所有列中具有相同值的行。

    由于我的索引仅代表列id,并且可能有很多用户居住在同一个城市,我认为这可能是最佳选择。

  • 唯一 UNIQUE是指索引中所有行必须唯一的索引。这是我怀疑这一行的主要原因。 cities选项。我的索引只代表一列,我希望该列中的值可以重复,所以如果我必须使用它,我就不安全。

  • FULLTEXT SPATIAL :我已经放弃了这些选项,因为我在idCity上看到了这一点我必须创建我的表格为{{1}其他类型的表支持type和这些类型的索引。

我的结论

我怀疑INDEXphpmyadmin类型的索引。这是因为我不知道当有人引用时: UNIQUE指的是索引的所有行必须是唯一的索引,例如,当他谈论索引的所有行时,如果它表示表中的所有列不必相同,这就是我想要获得的(它可以是多个用户居住在一个城市但不是两个用户重复)。

如果它引用所有行不必相同,我认为最好的方法必须是InnoDB,因为我不希望两行是相同的,但在它只引用的情况下索引本身(我的UNIQUE列)然后我必须选择INDEX类型的索引,因为我希望不止一个用户可以住在城市中。

我的问题

  • 我是否在UNIQUE上正确创建了外键?我的意思是,我是否正确地遵循每一步?

  • 我的哪个结论是正确的?或者都没有?

编辑:我提供的问题可能是我第一个问题的重复答案,但不是第二个问题。请在将其标记为重复之前阅读完整的问题。谢谢!

提前致谢!

0 个答案:

没有答案