IT story

MySQL 쿼리의 여러 열 인덱스 이해

hot-time 2020. 12. 31. 22:53
반응형

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

반응형