Mysql의 열 인덱스와 다열 인덱스를 정확하게 이해하기

1982 단어
Mysql 데이터베이스는 두 가지 종류의 인덱스를 제공합니다. 만약 정확하게 설정하지 않으면 인덱스의 이용 효율이 크게 떨어지지만 전혀 문제가 없다는 것을 알 수 없습니다.

CREATE TABLE test (
  id     INT NOT NULL,
  last_name CHAR(30) NOT NULL,
  first_name CHAR(30) NOT NULL,
  PRIMARY KEY (id),
  INDEX name (last_name,first_name)
);

위에서 생성한 것은 사실 다중 열 인덱스입니다. 열 인덱스를 만드는 코드는 다음과 같습니다.

CREATE TABLE test (
  id     INT NOT NULL,
  last_name CHAR(30) NOT NULL,
  first_name CHAR(30) NOT NULL,
  PRIMARY KEY (id),
  INDEX name (last_name),
   INDEX_2 name (first_name)
);

하나의 다열 인덱스는 통합 (concatenate) 인덱스 열 값으로 만든 값을 포함하는 정렬 그룹으로 볼 수 있습니다.질의 문에 last 가 포함된 경우name 및 firstname의 경우:

SELECT * FROM test WHERE last_name='Kun' AND first_name='Li';

sql에서 last 를 먼저 필터합니다name 조건에 맞는 기록, 그 기초 위에first 필터링name 조건에 맞는 기록입니다.그럼 우리 각각lastname 및 first두 개의 열 인덱스를 만들면 mysql의 처리 방식이 달라집니다. 가장 엄격한 인덱스를 선택해서 검색합니다. 검색 능력이 가장 강한 인덱스로 이해할 수 있습니다. 다른 인덱스는 사용할 수 없습니다. 이 효과는 여러 열 인덱스보다 못합니다.그러나 다중 열 인덱스를 사용하는 것도 조건이 필요합니다. 다음과 같은 형식의 조회 문구는 상위 다중 열 인덱스를 사용할 수 있습니다.

SELECT * FROM test WHERE last_name='Widenius';
SELECT * FROM test WHERE last_name='Widenius' AND first_name='Michael';
SELECT * FROM test WHERE last_name='Widenius' AND (first_name='Michael' OR first_name='Monty');
SELECT * FROM test WHERE last_name='Widenius' AND first_name >='M' AND first_name < 'N';

다음 형식의 질의문에는 여러 열 색인이 사용되지 않습니다.

SELECT * FROM test WHERE first_name='Michael';
SELECT * FROM test WHERE last_name='Widenius' OR first_name='Michael';

다중 인덱스는 각 열에 각각 인덱스를 만드는 것보다 유리하다. 인덱스를 많이 만들면 할수록 디스크 공간을 차지하고 데이터를 업데이트할 때 속도가 더 느리기 때문이다.또한 다열 인덱스를 만들 때 순서도 주의해야 한다. 엄격한 인덱스를 앞에 두어야 한다. 이렇게 하면 선별의 강도가 더욱 크고 효율이 높아진다.

좋은 웹페이지 즐겨찾기