source

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

lovecheck 2023. 1. 2. 22:42
반응형

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

다음은 쿼리입니다.

SELECT * FROM table WHERE accountid = 1 ORDER BY logindate DESC LIMIT 1

필드에 여러 열이 있는 인덱스를 추가한 경우:

INDEX(accountid,logindate)

MySQL은 이 다중 열 인덱스를 활용할 수 있습니까?아니면 한 필드는 where 절에 있고 다른 필드는 주문서에 있기 때문에 사용하지 않는 것입니까?또는 다중 열 색인 순서로 필드를 사용하면 문제가 없습니까?

좋은 질문입니다.

인덱스는 왼쪽에서 오른쪽으로 동작하기 때문에WHERE기준이 인덱스를 사용합니다.이 경우에는 지수를 활용한다(아래 실행 계획).

매뉴얼:

인덱스는 또한 다음 경우에도 사용할 수 있습니다.ORDER BY인덱스의 모든 미사용 부분과 추가 모든 부분이 인덱스와 정확하게 일치하지 않는 한ORDER BY열은 의 상수입니다.WHERE절을 클릭합니다.다음 쿼리는 인덱스를 사용하여 다음을 해결합니다.ORDER BY부품:

SELECT * FROM t1
WHERE key_part1=constant
ORDER BY key_part2;

단일 열 인덱스가 있는 경우(accountid대신 파일 정렬이 사용됩니다.따라서 쿼리는 해당 인덱스의 이점을 얻을 수 있습니다.


두 개의 열 색인

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 키 키_LEN REF 행이 추가로 필터링되었습니다.1 단순 t1 ref idx idx 2 const 5 100 사용 장소, 색인 사용

단일 열 색인

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 키 키_LEN REF 행이 추가로 필터링되었습니다.1 심플 t1 range idx idx 2 5 100 장소 사용, 파일 정렬 사용

언급URL : https://stackoverflow.com/questions/12728832/understanding-multiple-column-indexes-in-mysql-query

반응형