【问题标题】:use Foreign key indexes in multi index mysql在多索引mysql中使用外键索引
【发布时间】:2017-09-16 11:36:23
【问题描述】:

我有一个包含近 20 个字段的表,其中几个是已经被 Mysql 索引的外键,现在我想创建一个包含 3 个 FK 字段的多索引索引, 第一次尝试是基于Fields

ALTER TABLE `Add`
    Add INDEX `IX_Add_ON_IDCat_IDStatus_IDModeration_DateTo_DateAdded` 
       (`IDCategory`,`IDStatus`,`IDModeration`,`DateTo`,`DateAdded`);

但我认为最好在索引而不是字段上建立索引,但我的以下努力面临错误:Error Code: 1072. Key column 'FK_Add_Category' doesn't exist in table

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 索引)上添加索引,并且只有在列上创建索引的方法?如果是我如何创建它?

【问题讨论】:

  • 在索引上有一个索引 - 这是不可能的。
  • 可以对表名(索引列名)进行索引,索引不是列。
  • 问题是什么?第一条语句在 MySQL 中是正确的。
  • @zhilevan 。 . .没有“还”。 “索引上的索引”在 SQL 上下文中没有意义。

标签: mysql indexing


【解决方案1】:

索引是值的有序列表。它用于提高在表中查找行的效率。

想想INDEX(last_name, first_name) 的常见、现实生活中的例子。如果您有他们的姓氏和名字,则可以轻松查找某人。如果您只有他们的姓氏,那就很容易了。

但如果你只有他们的名字,那就没用了。

FOREIGN KEYs 需要查找。显然你对AddStatus 有一个FK,因为我看到FK_Add_AddStatus。该 FK 生成了对 AddStatus 的查找。可以把它想象成first_name 上的一个单独 索引。它与last_namefirst_name 上的索引完全不同。

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

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

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

【讨论】:

    猜你喜欢
    • 2010-11-01
    • 2015-05-12
    • 2011-03-29
    • 2018-10-02
    • 2011-07-01
    • 1970-01-01
    • 2023-03-24
    • 2012-04-29
    • 2020-01-29
    相关资源
    最近更新 更多