我应该在关系中使用index()吗?

时间:2018-10-04 13:28:55

标签: laravel

我不确定何时在迁移中使用index()。

我举一个例子:

  • 用户表
  • 用户银行明细表

目前,我将其编写为:

Schema::create('bankdetails', function (Blueprint $table) {
    $table->increments('id');
    $table->unsignedInteger('user_id');
    ...
});

我正在获取与

的关系
public function bankdetail(){
    return $this->hasOne(Bankdetail::class);
}

在这种情况下,您还会使用index()吗?

让我感到困惑的是杰夫的GitHub project,您会看到他很少使用index()。

除此之外,如果我要为其设置外键

$table->foreign('user_id')->references('id')->on('users');

我还需要使用Index()吗?

2 个答案:

答案 0 :(得分:1)

index()将索引添加到您的数据库。要知道何时在迁移中使用index(),您需要了解何时在数据库中添加索引。

索引是表中选定数据列的副本,可以非常有效地对其进行搜索。数据库索引允许查询从数据库中有效地检索数据。索引与特定的表有关,并且由一个或多个列组成。

正确地实现索引可以提高查询性能,但同时也会增加额外的写操作和存储空间来维护索引数据结构。您必须确保谨慎使用索引。

选择索引时的注意事项

  1. 索引最常使用的查询。换句话说,请按工作负载而不是按表选择索引。
  2. 保持索引数量的平衡,因为它们会引入额外的维护成本。但不要对索引总数设置上限。
  3. 重要或优先查询的索引列。
  4. 对索引列进行排序或分组,以提高性能。
  5. 包含唯一数据(例如电子邮件或用户名)的索引列
  6. 保存外键的索引列
  7. 索引列,这将增加仅索引访问的机会。如果对索引列的查询返回了其他一些列的数据,则可以为这些列建立索引以提高该查询的性能。

答案 1 :(得分:0)

如果您的问题是“我应该在index()还是user_id上使用id,那么答案是否定的。

一个是导致increments()方法被固有索引的主要原因。 另一个是外键,它也具有内在索引。

何时使用它: 当您在查询中的where条件中使用了一个字段(最好是整数)时。

示例:如果您的status字段包含值(0,1,2,3 ...),则应index()