MySQL 인덱스 튜토리얼 – 생성, 추가 및 삭제

인덱스 란 무엇입니까?

인덱스 MySQL 체계적인 순차적 방식으로 데이터를 정렬합니다. 데이터를 필터링하는 데 사용되는 열에 생성됩니다. 인덱스를 알파벳순으로 정렬된 목록으로 생각하세요. 정렬되지 않은 이름보다 알파벳순으로 정렬된 이름을 찾는 것이 더 쉽습니다.

자주 업데이트되는 테이블에 인덱스를 사용하면 성능이 저하될 수 있습니다. 이 때문입니다 MySQL 테이블에 데이터가 추가되거나 업데이트될 때마다 새로운 인덱스 블록을 생성합니다. 일반적으로 인덱스는 데이터가 자주 변경되지 않지만 선택 검색 쿼리에서 많이 사용되는 테이블에 사용되어야 합니다.

인덱스는 무엇을 사용합니까?

느린 시스템을 좋아하는 사람은 없습니다. 높은 시스템 성능은 거의 모든 데이터베이스 시스템에서 가장 중요합니다. 대부분의 기업은 데이터 검색 및 조작 속도를 높이기 위해 하드웨어에 막대한 투자를 합니다. 그러나 기업이 할 수 있는 하드웨어 투자에는 한계가 있습니다. 데이터베이스를 최적화하는 것이 더 저렴하고 더 나은 솔루션입니다.

MySQL 색인

응답 시간이 느린 이유는 일반적으로 데이터베이스 테이블에 레코드가 무작위로 저장되기 때문입니다. 검색어는 원하는 데이터를 찾기 위해 무작위로 저장된 전체 기록을 차례로 반복해야 합니다. 이로 인해 대규모 테이블에서 데이터를 검색할 때 데이터베이스 성능이 저하됩니다. 따라서 검색을 쉽게 하기 위해 데이터를 정렬하는 인덱스가 사용됩니다.

구문: 인덱스 생성

인덱스는 두 가지 방법으로 정의할 수 있습니다.

  1. 테이블 생성 시
  2. 테이블 생성 후

예:

myflixdb의 경우 전체 이름으로 데이터베이스를 검색할 것으로 예상됩니다.

새 테이블 “members_indexed”의 Index에 “full_names” 열을 추가하겠습니다.

아래에 표시된 스크립트는 이를 달성하는 데 도움이 됩니다.

CREATE TABLE `members_indexed` (
  `membership_number` int(11) NOT NULL AUTO_INCREMENT,
  `full_names` varchar(150) DEFAULT NULL,
  `gender` varchar(6) DEFAULT NULL,
  `date_of_birth` date DEFAULT NULL,
  `physical_address` varchar(255) DEFAULT NULL,
  `postal_address` varchar(255) DEFAULT NULL,
  `contact_number` varchar(75) DEFAULT NULL,
  `email` varchar(255) DEFAULT NULL,
  PRIMARY KEY (`membership_number`),INDEX(full_names)
) ENGINE=InnoDB;

위의 SQL 스크립트를 다음에서 실행합니다. MySQL "myflixdb"에 대한 워크벤치.

MySQL 인덱스 생성

myflixdb를 새로 고치면 member_indexed라는 새로 생성된 테이블이 표시됩니다.

"노트" member_indexed 테이블에는 인덱스 노드에 "full_names"가 있습니다.

멤버 기반이 확장되고 레코드 수가 증가함에 따라 WHERE 및 ORDER BY 절을 사용하는 member_indexed 테이블에 대한 검색 쿼리는 인덱스가 정의되지 않은 멤버 테이블에서 수행되는 쿼리에 비해 훨씬 빠릅니다.

인덱스 기본 구문 추가

위의 예에서는 데이터베이스 테이블을 정의할 때 인덱스를 생성했습니다. 이미 정의된 테이블이 있고 해당 테이블에 대한 검색 쿼리가 매우 느리다고 가정해 보겠습니다. 결과를 반환하는 데 너무 오랜 시간이 걸립니다. 문제를 조사한 결과 WHERE 절에서 가장 일반적으로 사용되는 열에 INDEX를 생성하면 시스템 성능을 크게 향상시킬 수 있음을 발견했습니다.

다음 쿼리를 사용하여 인덱스를 추가할 수 있습니다.

CREATE INDEX id_index ON table_name(column_name);

영화 테이블에 대한 검색 쿼리가 매우 느리고 "영화 제목"에 대한 인덱스를 사용하여 쿼리 속도를 높이고 싶다면 다음 스크립트를 사용하여 이를 달성할 수 있습니다.

CREATE INDEX `title_index` ON `movies`(`title`);

위 쿼리를 실행하면 영화 테이블의 제목 필드에 인덱스가 생성됩니다.

이는 "제목"을 사용하는 영화 테이블의 모든 검색 쿼리가 더 빨라진다는 것을 의미합니다.

그러나 영화 테이블의 다른 필드에 대한 검색 쿼리는 인덱싱된 필드를 기반으로 하는 쿼리에 비해 여전히 느립니다.

참고 : 데이터베이스 검색 엔진에 사용하려는 필드에 따라 필요한 경우 여러 열에 인덱스를 생성할 수 있습니다.

특정 테이블에 정의된 인덱스를 보려면 다음 스크립트를 사용하면 됩니다.

SHOW INDEXES FROM table_name;

이제 myflixdb의 영화 테이블에 정의된 모든 인덱스를 살펴보겠습니다.

SHOW INDEXES FROM `movies`;

위 스크립트를 실행하면 MySQL 워크 벤치 myflixdb에 대해 생성된 인덱스에 대한 결과를 제공합니다.

참고 : 테이블의 기본 키와 외래 키는 이미 인덱싱되었습니다. MySQL. 각 인덱스에는 고유한 이름이 있으며 해당 인덱스가 정의된 열도 표시됩니다.

구문: 인덱스 삭제

drop 명령은 테이블에 이미 정의된 인덱스를 제거하는 데 사용됩니다.

자주 업데이트되는 테이블에 인덱스를 이미 정의한 경우가 있을 수 있습니다. UPDATE 및 INSERT 쿼리 성능을 향상시키기 위해 이러한 테이블에서 인덱스를 제거할 수 있습니다. 테이블에 인덱스를 삭제하는 데 사용되는 기본 구문은 다음과 같습니다.

DROP INDEX `index_id` ON `table_name`;

이제 실제적인 예를 살펴보겠습니다.

DROP INDEX ` full_names` ON `members_indexed`;

위 명령을 실행하면 member_indexed 테이블에서 ID가 ` full_names`인 인덱스가 삭제됩니다.

요약

  • 인덱스는 성능을 크게 향상시키는 데 매우 강력합니다. MySQL 검색어.
  • 인덱스는 테이블을 생성할 때 정의할 수도 있고, 테이블을 생성한 후에 추가할 수도 있습니다.
  • 테이블의 둘 이상의 열에 인덱스를 정의할 수 있습니다.
  • SHOW INDEX FROM table_name은 테이블에 정의된 인덱스를 표시하는 데 사용됩니다.
  • DROP 명령은 특정 테이블에 정의된 인덱스를 제거하는 데 사용됩니다.

데일리 구루99 뉴스레터

지금 바로 전달되는 최신의 가장 중요한 AI 뉴스 기사로 하루를 시작하세요.