강의

멘토링

로드맵

Inflearn コミュニティ Q&A

rex5125 のプロフィール画像
rex5125

投稿した質問数

Real MySQL シーズン 1 - Part 1

Ep.04 ページング クエリの作成

복합 index 문의

解決済みの質問

作成

·

86

0

안녕하세요, 강의 잘 듣고 있습니다.

 

04 페이징 쿼리 작성 강의 > 데이터 개수 기반 방식 (동등 조건 사용 시) (9:36 부근) 에 나온 예시에 대한 질문입니다.

 

KEY index_userid_id (user_id, id)로 인덱스가 있는데요, user_id +id 가 아닌, user_id만 인덱스로 걸어도 N회차 쿼리가 잘 동작 할까요?

 

where 절에 user_id, id를 사용하고, ORDER BY 에 id가 있기 때문에 user_id + id 인덱스가 필요한 걸까요?

 

조금 더 자세히 알려주시면 감사하겠습니다.

mysqldbms/rdbmsbackendquery-tuningmysql-query

クイズ

MySQL에서 CHAR와 VARCHAR 데이터 타입의 주요 차이점은 무엇일까요?

CHAR는 가변 길이, VARCHAR는 고정 길이 문자열을 저장해요.

CHAR는 최대 길이만큼 공간을 미리 할당하고, VARCHAR는 저장된 데이터만큼만 공간을 사용해요.

VARCHAR는 인덱스를 사용할 수 없지만, CHAR는 사용할 수 있어요.

VARCHAR는 최대 저장 용량이 CHAR보다 훨씬 작아요.

回答 2

1

sungucklee2062님의 프로필 이미지
sungucklee2062
インストラクター

안녕하세요.

 

페이징에서 user_id 컬럼 뿐만 아니라 id 컬럼을 추가해서 복합 인덱스를 생성하는 것은, 중복된 user_id로 인해서 중간에 레코드가 짤리는 경우를 피하기 위해서 id 컬럼을 마지막에 추가한 것입니다. 아래와 같은 경우를 고려해보시면, 중간에 데이터가 사라지는 현상이 생길 수 있다는 것을 예상하실 수 있을 거에요. (첫번째 페이지의 마지막 user_id='esther' 일때, 다음 페이지는 user_id>'esther' 조건으로 검색해야 하는데, 이때 id = 11 인 레코드는 건너 뛸 위험이 있는거죠.

user_id    id
-------------
 esther    9
 esther    10
 esther    11
   matt    12
-------------

 

만약 user_id 가 중복이 없다면 (UNIQUE 하다면), 굳이 id 컬럼을 마지막에 추가하지 않고 user_id 컬럼만으로 인덱스를 생성해도 될듯 합니다.

 

감사합니다.

0

안녕하세요, 인프런 AI 인턴입니다.
rex님께서 질문하신 내용은 인덱스 최적화와 관련된 사항입니다.

복합 인덱스(KEY index_userid_id (user_id, id))는 WHERE 절과 ORDER BY 절에 사용된 컬럼과 가장 일치하는 형태가 될 때 최적의 성능을 발휘합니다.

  1. user_id만 인덱스로 걸어도 N회차 쿼리가 제대로 동작하는가?

    • 경우에 따라 다르지만 일반적으로 복합 인덱스가 아닌 user_id 단일 인덱스를 사용하는 경우, ORDER BY id 조건을 만족시키기 위해 추가적인 정렬 작업이 필요할 수 있습니다. 특히 user_id가 동일한 여러 행을 id 순으로 정렬해야 하는 경우에 성능 이점이 제한될 수 있습니다.
  2. user_id + id 인덱스가 필요한 이유

    • WHERE 절에 user_idid가 사용되고, ORDER BY 절에 id가 있는 상황에서는 복합 인덱스를 사용하여 질의 성능을 향상시킬 수 있습니다. 이는 전체적인 데이터 스캔을 줄이고, 이미 정렬된 상태로 데이터를 검색할 수 있도록 해주기 때문입니다.

따라서, 주어진 사용 사례에서는 user_id, id에 대한 복합 인덱스를 사용하는 것이 더 효율적인 전략이 될 것입니다. 이는 쿼리의 실행 계획을 통해 실제 성능을 비교하여 결정할 수 있습니다.

추가적인 도움이 필요하시다면 또 질문해 주세요.

이미지 URL: index explanation

Origin URL: Spring Data JPA Documentation

rex5125 のプロフィール画像
rex5125

投稿した質問数

質問する