我有一个包含近20个字段的表,其中几个是已经由Mysql索引的外键,现在我想创建一个包含3个FK字段的多索引索引, 第一次尝试是基于字段
ALTER TABLE `Add`
Add INDEX `IX_Add_ON_IDCat_IDStatus_IDModeration_DateTo_DateAdded`
(`IDCategory`,`IDStatus`,`IDModeration`,`DateTo`,`DateAdded`);
但我认为最好在索引上建立索引而不是在字段上建立索引,但我的以下工作遇到了错误:错误代码:1072。表中不存在键列“FK_Add_Category”
ALTER TABLE `Add`
Add INDEX `IX_Add_ON_IDCat_IDStatus_IDModeration_DateTo_DateAdded`
(`FK_Add_Category`,`FK_Add_AddStatus`,`FK_Add_AddModeration`,
`IX_Add_DateTo`,`IX_Add_DateAdded`);
我的问题是是否可以在现有索引上添加索引(在我的例子中为 FK 索引),并且有唯一的方法在列上创建索引?如果是的话我如何创建它?
最佳答案
索引是值的有序列表。它用于提高在表中查找行的效率。
考虑一下常见的、现实生活中的示例:INDEX(last_name, first_name)
。如果您知道某个人的姓氏和名字,就可以轻松查找该人。如果您只有他们的姓氏,那就很容易了。
但如果你只有他们的名字,那就没用了。
FOREIGN KEYs
需要查找。显然你有一个AddStatus
的FK,因为我看到了FK_Add_AddStatus
。该 FK 生成了对 AddStatus
的查找。可以将其视为 first_name
上的单独索引。它与 last_name
和 first_name
上的索引完全分开。
5 列通常太多,无法放入单个索引中。
MySQL 对于给定的 SELECT
仅使用一个索引。
那么,现在我问,什么 SELECT
可能会使用该 5 列索引?请给我们看看。我们可以讨论它是否有用,以及列是否处于最佳顺序。
关于mysql - 在多索引mysql中使用外键索引,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46253471/