Mysql 如何在innodb表中添加外键约束而不索引列?

Mysql 如何在innodb表中添加外键约束而不索引列?,mysql,phpmyadmin,Mysql,Phpmyadmin,我读了一些关于表索引的建议,并指出当sql查询运行缓慢时,应该稍后引入索引 我的问题是我在一个表中索引了几乎所有的列。此表与其他表绑定,例如用户表列country与country表绑定 user table country table id id countryId name 我在countryId列中添加了一个索引,这样我就可以将它链接到country表的id,因为当我在列上没有索引时,我无法创建外键约束 基本上,我有许

我读了一些关于表索引的建议,并指出当sql查询运行缓慢时,应该稍后引入索引

我的问题是我在一个表中索引了几乎所有的列。此表与其他表绑定,例如用户表列country与country表绑定

user table          country table
id                  id
countryId           name
我在countryId列中添加了一个索引,这样我就可以将它链接到country表的id,因为当我在列上没有索引时,我无法创建外键约束

基本上,我有许多列链接到其他表,只是为了给我的列添加约束

例如,country表不超过100,因此如果有人只是意外地插入了值101,mysql将不会接受该数据,因为country表只有1-100

那么,如何避免添加索引,并且仍然具有表数据约束的功能呢

  • 那建议太糟糕了

  • 索引要搜索的列,或需要特殊约束(如唯一值)的列


  • 不添加索引的唯一原因是它们确实会占用空间。但是,除非您处理的数据太多,需要数据库管理员,否则您可能不必担心它。

    以下是我阅读的建议链接。。这些值不是唯一的,它是一种查找表约束。但是我会经常去寻找它。那里的建议是专门针对“大”桌子的。提到的表格实际上仍然很小。答案是,在得到完整表扫描的任何列上添加索引——基本上是搜索的任何列。如前所述,当您需要一个足够大的表来处理这些问题时,您可能需要从数据库管理员那里获得专业帮助。在那之前,不要太担心。另外,这个问题的大多数其他答案都说“担心添加索引”是不成熟的,而不是索引本身。从声誉第二高的响应者那里,“有了这种插入率,为一个额外列编制索引的成本可以忽略不计。”另一个不使用索引的动机是:避免索引合并,这有时会给您带来非常糟糕的性能。