반응형
MySQL 쿼리의 여러 열 인덱스 이해
다음은 쿼리입니다.
SELECT * FROM table WHERE accountid = 1 ORDER BY logindate DESC LIMIT 1
이제 필드에 여러 열이있는 인덱스를 추가 한 경우 :
INDEX(accountid,logindate)
MySQL은이 다중 열 인덱스를 활용합니까? 아니면 한 필드가 where 절에 있고 다른 필드가 order 문에 있기 때문에 사용하지 않습니까? 아니면 여러 열 인덱스의 순서로 필드를 사용하는 한 중요하지 않습니까?
좋은 질문.
인덱스는 왼쪽에서 오른쪽으로 작동하므로 WHERE
기준은 인덱스를 사용합니다. 정렬은이 경우 색인도 활용합니다 (아래 실행 계획).
로부터 수동 :
인덱스의
ORDER BY
모든 사용되지 않은 부분과 모든 추가ORDER BY
열이WHERE
절 에서 상수 인 한 인덱스는 인덱스와 정확히 일치하지 않더라도 사용할 수 있습니다 . 다음 쿼리는 인덱스를 사용하여ORDER BY
부품을 확인합니다.SELECT * FROM t1 WHERE key_part1=constant ORDER BY key_part2;
단일 열 인덱스 ( accountid
)가있는 경우 대신 파일 정렬이 사용됩니다. 따라서 쿼리는 해당 인덱스의 이점을 얻습니다.
2 열 인덱스
create table t1 (
accountid tinyint,
logindate date);
create index idx on t1 (accountid, logindate);
insert into t1 values (1, '2012-09-05'), (2, '2012-09-09'), (3, '2012-09-04'),
(1, '2012-09-01'), (1, '2012-09-26'), (2, '2012-05-16'),
(1, '2012-09-01'), (3, '2012-10-19'), (1, '2012-03-01')
실행 계획
ID SELECT_TYPE 테이블 유형 POSSIBLE_KEYS KEY KEY_LEN REF 행이 추가로 필터링 됨 1 SIMPLE t1 ref idx idx 2 const 5 100 Where 사용; 색인 사용
단일 열 색인
create table t1 (
accountid tinyint,
logindate date);
create index idx on t1 (accountid);
insert into t1 values (1, '2012-09-05'), (2, '2012-09-09'), (3, '2012-09-04'),
(1, '2012-09-01'), (1, '2012-09-26'), (2, '2012-05-16'), (1, '2012-09-01'),
(3, '2012-10-19'), (1, '2012-03-01')
실행 계획
ID SELECT_TYPE 테이블 유형 POSSIBLE_KEYS KEY KEY_LEN REF 행이 추가로 필터링 됨 1 SIMPLE t1 범위 idx idx 2 5 100 Where 사용; 파일 정렬 사용
참조 URL : https://stackoverflow.com/questions/12728832/understanding-multiple-column-indexes-in-mysql-query
반응형
'IT story' 카테고리의 다른 글
"COM Interop 등록"은 실제로 어떤 역할을합니까? (0) | 2020.12.31 |
---|---|
`--squash`와`--no-ff --no-commit`의 차이점은 무엇입니까? (0) | 2020.12.31 |
Maven 저장소, pom.xml 또는 settings.xml을 지정하는 가장 좋은 장소는 어디입니까? (0) | 2020.12.31 |
Azure의 정적 콘텐츠 (svg, woff, ttf)에 대한 404 (0) | 2020.12.30 |
Akka는 Play에서 어떻게 사용 되나요? (0) | 2020.12.30 |