mysql - 在多索引mysql中使用外键索引

标签 mysql indexing

我有一个包含近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_namefirst_name 上的索引完全分开。

5 列通常太多,无法放入单个索引中。

MySQL 对于给定的 SELECT 仅使用一个索引。

那么,现在我问,什么 SELECT 可能会使用该 5 列索引?请给我们看看。我们可以讨论它是否有用,以及列是否处于最佳顺序。

关于mysql - 在多索引mysql中使用外键索引,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46253471/

相关文章:

indexing - 更改 Couchbase 的索引以使用 num_replica

php - jquery文件上传php数据库blueimp

php - 基本 mysql/数据存储问题 : information architecture, 代码本身不多

MySQL - 如何存储执行结果

r - 计算数组中的索引是否比让编译器这样做更有效?

iphone - 通过迁移将核心数据索引添加到某些属性

sql - 非聚集索引在不同列类型上的性能

python - SQLAlchemy 中跨越四个表的关系

MySQL 触发器 - 使用额外值更新关系表

database - 如何在 Grails 中使用 Hibernate 索引?