【问题标题】:Why Does Laravel automatically add an index for constrained columns为什么 Laravel 会自动为受约束的列添加索引
【发布时间】:2020-12-07 20:32:33
【问题描述】:

为什么 Laravel 会自动为这种情况添加一个“INDEX”?

$table->foreignId('user_id')->nullable()
    ->constrained('users','id')
    ->onDelete('no action')
    ->onUpdate('no action');

【问题讨论】:

    标签: php mysql sql laravel indexing


    【解决方案1】:

    来自https://dev.mysql.com/doc/refman/8.0/en/create-table-foreign-keys.html

    MySQL 需要外键和引用键的索引,以便外键检查可以快速且不需要表扫描。在引用表中,必须有一个索引,其中外键列按相同顺序列为第一列。 如果引用表不存在,则会自动在其上创建此类索引。 如果您创建另一个可用于强制外键约束的索引,则稍后可能会静默删除此索引。 index_name,如果给定,则如前所述使用。

    【讨论】:

    • (这比之前接受的答案更正确,更不分散。)
    【解决方案2】:

    Laravel 只添加外键约束,并没有隐式添加 index。但是有些数据库比如 MySQL 会自动index外键列。

    当您在数据库表中定义外键约束时,索引不会在上自动创建 >外键,如在PRIMARY KEY约束情况下,集群索引自动创建定义它的时候。 强烈建议在外键列上创建索引,以增强主外键连接的性能,同时降低维护关系的成本 childparent 表之间。在添加任何新索引之前,最好先在开发环境中进行测试,并在实施后监控整体性能,以确保添加的索引能够提高性能并且不会对系统性能产生负面影响。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-05-23
      • 1970-01-01
      • 2020-01-24
      • 1970-01-01
      • 1970-01-01
      • 2016-01-13
      • 2018-01-04
      • 1970-01-01
      相关资源
      最近更新 更多