English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
MySQL 인덱스의 생성은 MySQL의 효율적인 실행에 매우 중요합니다. 인덱스는 MySQL의 검색 속도를 크게 향상시킬 수 있습니다.
예를 들어, 인덱스를 잘 설계하고 사용한 MySQL이 랜보르기니라면, 인덱스를 설계하고 사용하지 않은 MySQL은 인력 삼륜차입니다.
중국어 사전의 목차 페이지(인덱스)를 예로 들어, 풍자, 글자 수, 부수 등으로 정렬된 목차(인덱스)를 통해 필요한 글자를 빠르게 찾을 수 있습니다.
인덱스는 단일 열 인덱스와 조합 인덱스로 나뉩니다. 단일 열 인덱스는 하나의 인덱스가 단일 열만 포함하는 인덱스로, 하나의 테이블에 여러 개의 단일 열 인덱스가 있을 수 있지만, 이는 조합 인덱스가 아닙니다. 조합 인덱스는 하나의 인덱스가 여러 열을 포함하는 인덱스입니다.
인덱스를 생성할 때, 해당 인덱스가 SQL 쿼리 문장의 조건(일반적으로 WHERE 문장의 조건)에 적용되도록 확인해야 합니다.
실제로, 인덱스는 또 다른 테이블로, 이 테이블은 주키와 인덱스 필드를 저장하고 실체 테이블의 기록을 가리킵니다.
위에서는 인덱스 사용의 장점에 대해 설명했습니다. 그러나 인덱스를 과도하게 사용하면 부작용이 발생할 수 있습니다. 따라서 인덱스도 단점이 있습니다: 인덱스는 쿼리 속도를 크게 향상시키지만, 테이블을 업데이트할 때(INSERT, UPDATE, DELETE) 테이블 업데이트 속도를 줄입니다. 왜냐하면 테이블을 업데이트할 때 MySQL은 데이터를 저장하는 것 외에 인덱스 파일도 저장해야 합니다.
인덱스를 설정하면 디스크 공간을 차지하는 인덱스 파일이 생성됩니다.
이것은 가장 기본적인 인덱스로, 어떤 제한도 없습니다. 다음과 같은 몇 가지 생성 방법이 있습니다:
CREATE INDEX indexName ON table_name (column_name)
CHAR 및 VARCHAR 타입이면, 길이는 필드 실제 길이보다 작을 수 있습니다; BLOB 및 TEXT 타입이면 반드시 길이를 지정해야 합니다.
ALTER table tableName ADD INDEX indexName(columnName)
CREATE TABLE mytable( ID INT NOT NULL, username VARCHAR(16) NOT NULL, INDEX [indexName] (username(length)) );
DROP INDEX [indexName] ON mytable;
이는 이전 일반 인덱스와 유사하지만, 다른 점은 인덱스 열의 값이 유일해야 하며 공백 값이 허용되는 것입니다. 조합 인덱스라면 열 값의 조합이 유일해야 합니다. 다음과 같은 방식으로 생성할 수 있습니다:
CREATE UNIQUE INDEX indexName ON mytable(username(length))
ALTER table mytable ADD UNIQUE [indexName] (username(length))
CREATE TABLE mytable( ID INT NOT NULL, username VARCHAR(16) NOT NULL, UNIQUE [indexName] (username(length)) );
데이터 테이블 인덱스를 추가하는 방법이 네 가지 있습니다:
ALTER TABLE tbl_name ADD PRIMARY KEY (column_list): 이 문장은 주키를 추가하며, 이는 인덱스 값이 유일해야 하고 NULL이 될 수 없다는 의미입니다.
ALTER TABLE tbl_name ADD UNIQUE index_name (column_list): 이 문장은 인덱스 값이 유일해야 하며 (NULL을 제외하고 NULL은 여러 번 나타날 수 있습니다) 요구합니다.
ALTER TABLE tbl_name ADD INDEX index_name (column_list): 일반 인덱스를 추가하면 인덱스 값이 여러 번 나타날 수 있습니다.
ALTER TABLE tbl_name ADD FULLTEXT index_name (column_list):이 문장은 인덱스가 FULLTEXT 인全文 인덱스를 지정합니다.
다음 예제는 테이블에 인덱스를 추가하는 것입니다.
mysql> ALTER TABLE testalter_tbl ADD INDEX (c);
ALTER 명령어에서 DROP 절을 사용하여 인덱스를 제거할 수 있습니다. 다음 예제를 통해 인덱스 제거를 시도해 보세요:
mysql> ALTER TABLE testalter_tbl DROP INDEX c;
기본 키는 열에 영향을 미칩니다(한 개의 열이나 여러 열이 결합된 기본 키가 될 수 있습니다). 기본 키 인덱스를 추가할 때는 기본 키가 기본적으로 비어 있지 않도록 해야 합니다(NOT NULL). 예제는 다음과 같습니다:
mysql> ALTER TABLE testalter_tbl MODIFY i INT NOT NULL; mysql> ALTER TABLE testalter_tbl ADD PRIMARY KEY (i);
또한 ALTER 명령을 사용하여 기본 키를 제거할 수 있습니다:
mysql> ALTER TABLE testalter_tbl DROP PRIMARY KEY;
기본 키를 제거할 때는 PRIMARY KEY만 지정하면 됩니다. 하지만 인덱스를 제거할 때는 인덱스 이름을 알아야 합니다.
SHOW INDEX 명령을 사용하여 테이블에 대한 관련 인덱스 정보를 나열할 수 있습니다. \G을 추가하여 출력 정보를 정렬할 수 있습니다.
다음 예제를 시도해 보세요:
mysql> SHOW INDEX FROM table_name; \G ........