집 >데이터 베이스 >MySQL 튜토리얼 >Mysql 인덱스를 생성, 삭제 및 사용하는 데 드는 비용은 얼마입니까?
innodb 및 myisam 엔진은 UNIQUE 속성을 가진 기본 키 또는 열에 대한 인덱스를 자동으로 생성합니다.
다른 열을 색인화하려면 명시적으로 지정해야 합니다.
1. 테이블 생성 시 인덱스를 생성합니다
CREATE TABLE 表名 ( 各个列的信息..., (KEY/INDEX) 索引名 (需要被索引的单个列或多个列) )
KEY 또는 INDEX 중 하나를 동의어로 사용할 수 있습니다.
예를 들어 index_demo 테이블을 생성할 때 c2 및 c3 열에 공동 인덱스를 추가합니다.
CREATE TABLE index_demo( c1 INT, c2 INT, c3 CHAR(1), PRIMARY KEY(c1), INDEX idx_c2_c3 (c2, c3) );
여기서 생성된 인덱스 이름은 idx_c2_c3이지만 인덱스 이름은 임의로 지정할 수 있지만 idx_를 사용하는 것이 좋습니다. 접두사로 사용되며 그 뒤에는 인덱스의 열 이름이 옵니다. 여러 열은 밑줄로 구분됩니다.
2. 테이블 구조 수정 시 인덱스 추가
ALTER TABLE 表名 ADD (KEY/INDEX) 索引名 (需要被索引的单个列或多个列);
3. 테이블 구조 수정 시 인덱스 삭제
ALTER TABLE 表名 DROP (KEY/INDEX) 索引名;
이제 원래 생성된 인덱스 idx_c2_c3을 삭제하면 다음과 같이 작성할 수 있습니다.
ALTER TABLE index_demo DROP INDEX idx_c2_c3;
인덱스는 좋은 것이지만 함부로 만들 수는 없습니다.
이것은 매우 명백합니다.
인덱스가 생성될 때마다 이에 대한 B+ 트리를 구축해야 합니다.
각 B+ 트리의 각 노드는 데이터 페이지로, 기본적으로 16kb의 저장 공간을 차지합니다.
큰 B+ 트리는 많은 데이터 페이지로 구성됩니다.
그래서 저장 공간을 많이 차지하게 됩니다.
순서를 유지하는 데 시간이 많이 걸립니다
테이블에 데이터를 추가, 삭제, 수정할 때마다 각 B+ 트리 인덱스를 수정해야 합니다.
우리는 알고 있습니다:
B+ 트리의 각 수준에 있는 노드는 인덱스 열 값의 오름차순으로 이중 연결 목록을 형성합니다.
리프 노드든 내부 노드든 내부 레코드는 인덱스 열의 값 순서대로 단일 연결 리스트를 구성합니다.
따라서 추가, 삭제, 수정이 수행되면 노드와 레코드의 순서가 손상될 수 있으며, 스토리지 엔진은 노드의 순서를 유지하기 위해 페이지 분할 및 재활용과 같은 작업을 수행하는 데 추가 시간이 필요합니다. 기록.
인덱스를 많이 생성하게 되면 각 인덱스에 해당하는 B+트리에 관련된 유지보수 작업을 거쳐야 하므로 소모량이 많아진다고 생각하시면 됩니다.
시간이 많이 걸리는 실행 계획 분석
쿼리 문을 실행하기 전에 먼저 실행 계획이 생성됩니다.
일반적으로 쿼리 문은 실행 중에 최대 하나의 보조 인덱스를 사용합니다. 실행 계획을 생성할 때 쿼리를 실행하기 위해 서로 다른 인덱스를 사용하는 데 드는 비용을 계산하고 마지막으로 쿼리에 대한 가장 낮은 인덱스를 선택해야 합니다.
인덱스가 너무 많이 생성되면 비용 분석에 너무 많은 시간이 소요되어 쿼리문 실행 성능에 영향을 줄 수 있습니다.
위 내용은 Mysql 인덱스를 생성, 삭제 및 사용하는 데 드는 비용은 얼마입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!