【Laravel】作成済みのテーブルにインデックスを作成(追加)する

【Laravel】作成済みのテーブルにインデックスを作成(追加)する

すでにDBに作成済みのテーブルに対して、新たにインデックスを作成する場合のやり方です。

マイグレーションファイルを作成

ファイル名やテーブル名(以下のpostsの部分)は適宜変更してください。

php artisan make:migration add_index_to_posts_table --table=posts

マイグレーションファイル編集

->index('xxx')でインデックスを作成できます。xxxの部分でカラム名を指定します。

public function up()
{
    Schema::table('posts', function (Blueprint $table) {
        // インデックス追加
        $table->index('content');
    });
}

public function down()
{
    Schema::table('posts', function (Blueprint $table) {
        // インデックス削除
        $table->dropIndex(['content']);
    });
}

インデックス名を指定する

Laravelは自動的にインデックス名を付けてくれますが、インデックス作成メソッドの第2引数で指定も可能です。

$table->index('content', 'content_index_name');

複合インデックスの場合

複合インデックスの場合は、配列でカラム名を指定します。

public function up()
{
    Schema::table('posts', function (Blueprint $table) {
        $table->index(['content', 'author_id']);
    });
}

public function down()
{
    Schema::table('posts', function (Blueprint $table) {
        $table->dropIndex(['content', 'author_id']);
    });
}

マイグレーション実行

php artisan migrate