[MySQL] PK 컬럼 순서와 Index

2024. 7. 13. 12:04·스터디/Database
728x90

목차

     

     

     

    1. PK 컬럼 순서의 중요성

    • 인덱스 구성에서 의도하지 않은 순서의 Primary Key Unique Index가 생성됩니다.
    • 많은 인덱스가 생성되므로 입력/수정/삭제 시 불필요한 내부 작업이 증가해 성능에 악영향을 미칠 수 있습니다.

     

    2. PK 구성과 Index 이용

    • 스키마를 생성하기 이전에 데이터 모델의 PK 순서를 조절하지 않은 채 테이블을 생성하면 인덱스를 이용하지 못해 테이블 Full Scan 현상이 발생할 경우가 있습니다.

    예시 테이블

    create table multi_pk_table
    (
        student_id varchar(255) not null,
        year      datetime     not null,
        semester       int          not null,
        PRIMARY KEY (student_id, year, semester)
    );

     

    예시 쿼리

    explain
    select *
    from multi_pk_table
    where semester = 1;
    • multi_pk_table 인덱스 (student_id, year, semester) 중에 student_id에 대한 값이 where 절에 들어오지 않아 full scan이 일어납니다.

     

    create table multi_pk_table
    (
        student_id varchar(255) not null,
        year      datetime     not null,
        semester       int          not null,
        PRIMARY KEY (semester, student_id, year)
    );
    • 조회를 할 때 semester, student_id 에 대한 값이 빈번하게 들어간다면 위처럼 순서를 변경하여 인덱스를 이용하게 만듭니다.

     

    3. Index 이용 최적화

    • 예시 테이블 A
    create table test_A
    (
        student_id varchar(255) not null,
        year      datetime     not null,
        semester       int          not null,
        PRIMARY KEY (student_id, year)
    );

     

    • 예시 테이블 B
    create table test_B
    (
        student_id varchar(255) not null,
        year      datetime     not null,
        semester       int          not null,
        PRIMARY KEY (year, student_id)
    );

     

    • 예시 쿼리
    explain
    select *
    from test_A
    where student_id = '111111' 
    and DATE(year) between '2024-01-01' and '2024-12-31';

     

    • student_id 은 ‘=’으로 조건을 걸어올 것입니다.
    • year 은 between으로 조건을 걸어온다고 가정합니다.
    • ⇒ 인덱스를 이용했지만 최적화가 됐는지 확인을 해야됩니다.

     

    • test_A 테이블은 (pk: student_id + year)  student_id를 먼저 검색하고 날짜 범위를 검색합니다. → 이게 더 효율적!!
    • test_B 테이블은 (pk: year + student_id) 날짜 범위를 먼저 검색을 하고 student_id를 조회합니다.
    • PK 구성을 조정하여 PK 인덱스 조회 시 범위를 줄임으로써 성능 향상을 유도할 수 있습니다.

     

    설계 단계를 마치기 전 데이터 모델링을 수행할 때 PK 컬럼 순서에 대해 반드시 아래 두 가지를 검토하여 조정해야 합니다.

    1. 인덱스를 잘 사용하는가?
    2. 인덱스 범위를 효율적으로 사용하는가?

     

     


    <참고자료>

    https://clairdelunes.tistory.com/48

    https://k9e4h.tistory.com/396

    https://balldev.tistory.com/93

    728x90
    저작자표시 비영리 변경금지 (새창열림)

    '스터디 > Database' 카테고리의 다른 글

    [MySQL] VARCHAR vs TEXT  (3) 2025.06.08
    [MySQL] 대용량 테이블 스키마 변경하기  (0) 2024.04.14
    [MySQL] TEXT Column cannot set default value  (0) 2023.08.12
    [DB] MySQL CharacterSet과 Collation  (0) 2022.11.12
    [MySQL] 다중 테이블 업데이트, 여러 테이블 update 하기  (1) 2022.10.06
    '스터디/Database' 카테고리의 다른 글
    • [MySQL] VARCHAR vs TEXT
    • [MySQL] 대용량 테이블 스키마 변경하기
    • [MySQL] TEXT Column cannot set default value
    • [DB] MySQL CharacterSet과 Collation
    zoodi
    zoodi
    IT/개발 관련 지식을 기록하는 블로그입니다.
    • zoodi
      오늘의 기록
      zoodi
    • 전체
      오늘
      어제
      • 분류 전체보기
        • 후기
          • 컨퍼런스
          • 일상리뷰
        • 금융경제
          • 뉴스
          • 금융IT용어
          • 경제 및 부동산
        • 코딩 테스트
        • 스터디
          • JAVA
          • Kotlin
          • Spring
          • React, Nextjs
          • 인공지능 AI
          • Cloud & k8s
          • Kafka
          • Database
          • Network
          • Algorithm
          • Hadoop
          • LINUX
          • R Programming
          • 기타 (소공, 보안)
        • 도서
        • 기타
    • 블로그 메뉴

      • 홈
      • 스터디
      • 금융경제
      • 후기
      • 기타
    • 링크

    • 공지사항

    • 인기 글

    • 태그

      쿠버네티스
      프로그래머스
      이분탐색
      pythoncodingtest
      스프링
      자바
      codility
      코테공부
      LeetCode
      kafka
      springboot
      코딩테스트
      스프링부트
      자료구조
      네트워크
      MySQL
      CodingTest
      Python
      금융용어
      db
      코테
      Kotlin
      java
      Spring
      리트코드
      알고리즘
      코딜리티
      카카오코테
      코딩
      C++
    • 최근 댓글

    • 최근 글

    • hELLO· Designed By정상우.v4.10.4
    zoodi
    [MySQL] PK 컬럼 순서와 Index
    상단으로

    티스토리툴바