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

时间:2017-09-16 11:36:24

标签: mysql indexing

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

    var table = $('#example').DataTable({
    "ordering": false,
    buttons: [{
        extend: "print",
        className: "btn dark btn-outline"
    }, {
        extend: "copy",
        className: "btn red btn-outline"
    }, {
        extend: "pdf",
        className: "btn green btn-outline"
    }, {
        extend: "excel",
        className: "btn yellow btn-outline "
    }, {
        extend: "csv",
        className: "btn purple btn-outline "
    }, {
        extend: "colvis",
        className: "btn dark btn-outline",
        text: "Columns"
    }],
});

但我认为最好在索引而不是字段上设置索引,但我的后续工作面临错误: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

我的问题是是否可以在存在的索引(在我的情况下是FK索引)中添加索引,并且有唯一的方法在列上创建索引?如果是的话我是如何创造的?

1 个答案:

答案 0 :(得分:1)

索引是有序的值列表。它用于使查找表中的行更有效。

想想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列索引?请告诉我们。我们可以讨论它是否有用,以及列是否处于最佳顺序。