Laravel에서 색인 생성 및 삭제

Laravel은 데이터베이스 정의를 마이그레이션을 사용하여 업데이트합니다.
최근에는 인덱스를 만들거나 삭제할 때 인덱스 이름을 지정하는 방법이 아닙니다.
문서를 잘 보면 알 수 있습니다만, 여기에 주의점을 정리합니다.

여기에 나열된 샘플 코드는 마이그레이션 파일에 설명한다고 가정합니다.

만들기



테이블 정의 시 작성


Schema::create('books', function (Blueprint $table) {
    $table->increments('id');
    $table->string('title')->index();  # Index
    $table->string('isbn')->unique();  # Create unique index
    $table->integer('price');
    $table->integer('author_id');
    $table->timestamps();
});

이 예에서는 두 개의 색인을 작성합니다.
테이블의 컬럼 정의시에 작성한 인덱스의 이름은 ${table_name}_${column_name}_${index_type} 와 같이 자동으로 생성됩니다.
예를 들어 이 샘플 코드라면, 생성되는 인덱스의 이름은 각각 books_title_indexbooks_isbn_unique 입니다.
index , unique 메소드의 인수로서 캐릭터 라인을 건네주는 것으로, 인덱스명을 지정할 수가 있습니다.

테이블 정의 후 작성


Schema::table('books', function (Blueprint $table) {
    $table->index('title');
});

열 이름을 지정하여 만들 수 있습니다. 위와 같이, 이 때 작성되는 인덱스명은 ${table_name}_${column_name}_${index_type} 입니다.
두 번째 인수에 문자열을 전달하여 인덱스 이름을 지정할 수 있습니다.

복합 인덱스


Schema::table('author_book', function (Blueprint $table) {
    $table->index(['author_id', 'book_id']);
});

복합 인덱스는, 인덱스의 대상의 컬럼명을 배열로 지정하는 것으로 작성할 수 있습니다.

삭제



삭제는 인덱스의 종류마다 메소드가 다릅니다.
일반 인덱스에는 dropIndex , 고유 인덱스에는 dropUnique 를 사용합니다.

건네주는 인수의 형태에 의해 삭제하는 대상의 인덱스가 다르므로 주의가 필요합니다.

문자열을 전달하면



지정한 캐릭터 라인과 같은 이름의 인덱스를 삭제한다.
컬럼명이 아니기 때문에 주의
$table->dropIndex('books_title_index');

문자열의 배열을 전달하면



대상 인덱스 이름 생성 규칙에서 만든 인덱스 이름을 삭제합니다.
$table->dropIndex(['title']);

이 예에서는 books_title_index라는 인덱스를 삭제합니다.

복수의 요소를 가지는 배열을 건네주었을 경우, 그 요소를 컬럼명으로 하는 복합 인덱스를 삭제합니다.
복합 인덱스의 경우, 배열로 지정한 컬럼의 순서가 인덱스명에도 영향을 주기 때문에, 삭제할 때에도 그 순서를 지킬 필요가 있습니다.

요약



문서를 잘 읽어 보자.

참고


  • Database: Migrations - Laravel - The PHP Framework For Web Artisans
  • 좋은 웹페이지 즐겨찾기