2016-06-23 3 views
-1

최근에 mySQL 인덱싱을 읽었으며 다중 인덱싱에 대한 필자의 이해가 올바른지 알고 싶습니다. 나는 주로 InnoDB를 사용한다.다중 컬럼 대 다중 컬럼 인덱싱의 개념

SELECT * FROM tbl_test WHERE col1=X AND col2=Y

멀티 컬럼 인덱스

인덱스가 가정 :

CREATE INDEX idx_multi ON tbl(col1,col2,col3)

(가)

나는 예를 들어 다음 쿼리를 사용합니다 전체 색인은 어떻게 든 연결됩니다 (가장 단순한 wo uld는 사이에 구분 기호를 추가해야합니다. 쉼표)를 작성하여 B- 트리에 직접 저장하십시오. B- 트리의 구조는 왼쪽에서 오른쪽으로 색인 검사를 강제합니다. (색인은 이제 문자열로 저장되기 때문에 < - 누군가가이 문제를 조사 할 수 있습니까?) 따라서 idx_multi에 하나의 B- 트리 검색 만 있습니다. . 파서 모두 idx_col1idx_col2의 B-트리를 검색

CREATE INDEX idx_col3 ON tbl(col3)

는, 행 (2 개) 각각의 세트를 리턴

CREATE INDEX idx_col1 ON tbl(col1)

CREATE INDEX idx_col2 ON tbl(col2)

다중 단일 열 인덱스 결과를 얻으려면 INTERSECT을 실행하십시오 (mySQL Inde x 병합 최적화). 이 경우 엔진은 추가 쿼리를 실행하기 전에 B- 트리 검색을 2 번 실행합니다.

또 다른 질문이 있습니다. 인덱스에 대한 B- 트리 구현의 경우 INT 인덱스 make가 VARCHAR 인덱스보다 효율적으로 검색합니까?

누군가 내 이해의 결함을 지적 할 수 있으면 감사하겠습니다.

답변

0

짧은 답변 :

  • "인덱스 병합 교차은"좋은 종합 지수보다 효율적이다.
  • VARCHARINT보다 약간 효율적이지 않습니다. 그것에 대해 걱정하지 마십시오.
  • PRIMARY KEY(string)에서 PRIMARY KEY(id), UNIQUE(string)으로 변경하면 대개 성능이 저하됩니다.
  • idx_multi개념이 정확합니다.

긴 응답이이 형식에서는 너무 길지만 내 discussion of composite indexesindex cookbook에 입력했습니다.