inblog logo
|
parangdajavous
    Data Base

    [Data Base] 12. Index_3.Index 실습

    김미숙's avatar
    김미숙
    Mar 20, 2025
    [Data Base] 12. Index_3.Index 실습
    Contents
    1. Dummy data settingIndex 생성UK 생성복합 Index

    1. Dummy data setting

    프로시저 호출

    notion image
    keep - alive: wait를 길게!
    keep - alive: wait를 길게!

    Dummy data setting

    create table member_tb( id int primary key auto_increment, gender char(1), nickname varchar(20), age int, money int );
    DELIMITER $$ DROP PROCEDURE IF EXISTS insertDummyData$$ CREATE PROCEDURE insertDummyData() BEGIN DECLARE i INT DEFAULT 1; WHILE i <= 1000000 DO IF mod(i,2) = 1 THEN INSERT INTO member_tb(gender, nickname, age, money) VALUES('M', concat('닉네임', i), FLOOR(1 + RAND() * 60),FLOOR(10000 + RAND() * 100000)); ELSE INSERT INTO member_tb(gender, nickname, age, money) VALUES('F', concat('닉네임', i), FLOOR(1 + RAND() * 60),FLOOR(10000 + RAND() * 100000)); END IF; SET i = i + 1; END WHILE; END$$ DELIMITER $$
    CALL insertDummyData;
     
    select * from member_tb; -- 0.234초 select * from member_tb where nickname = '닉네임7'; -- 0초 select * from member_tb where id =
    ❗
    index full scan
    인덱스 테이블을 모두 스캔
     

    Index 생성

    ‼️
    비즈니스 상 해당 칼럼을 조회하는 일이 빈번하게 있어야함
    데이터 중복이 15% 이내
    -- Index 생성 create index nickname_idx on member_tb (nickname); -- 왜 닉네임7을 조회하면 안되는가? -> 캐싱되어있음(LRU 알고리즘) select * from member_tb where nickname = '닉네임8';
    ❗
    LRU 알고리즘(Least Recently Used Algorithm)
    • 가장 오랫동안 참조되지 않은 페이지를 교체하는 기법
    • LRU를 구현하기 위해서는 캐시가 가득 찼을때, 가장 오랫동안 참조되지 않은 페이지를 찾아서 없애는 과정이 필요
    • LRU의 원리는 캐시의 크기가 3인데 이미 3개의 페이지가 캐시에 들어있다면 맨 뒤에 있는 페이지번호 node 를 지우고 새로운 페이지번호 node 를 앞에 연결해주는 방식
     
    create index money_idx on member_tb (money); -- index Range scan select * from member_tb where money between 20000 and 30000; -- 평균 / 0.422초 -- 인덱스로 행을 걸러내고, 그 결과를 가지고 평균을 구한다 select avg(age) from member_tb where money between 20000 and 30000;
    ❗
    Index Range scan 
    index 값이 unique가 아니라 중복을 허용할 때, 2번 이상 범위를 탐색하는 방법
    ndex를 수직 탐색 후 필요한 범위까지만 탐색
     
    특징
    • 비교조건(>,<) 사용 시 --> Unique Index
    • Non Unique Index 사용시 사용될 수 있음
    • 수직 탐색 후 필요한 범위까지만 탐색
    • Single Block Read
     

    UK 생성

    -- index 삭제 그리고 UK 생성 (데이터 유일할 경우 unique / 자주찾을거고 데이터 중복이 15% 이내는 index) drop index nickname_idx on member_tb; alter table member_tb add constraint uk_nickname unique (nickname); -- 0초 select * from member_tb where nickname = '닉네임9'; select * from member_tb where money between 10000 and 20000;
    ❗
    Index unique scan
    값이 하나만 존재하는 것을 보장하기 때문에, 1번만 조회
    결과로 하나의 건이 반환될때 사용되고 칼럼이 유일한 값으로 구성
    Primary Key에 기본적으로 생성되는 인덱스
    조건 검색이 단일(=)인 경우 사용하게 된다
     
    특징
    • 칼럼의 값이 유일한 Primary Key에 사용된 Index
    • 동등 조건 "="
    • Single Block
     

    복합 Index

    -- money, age 복합 index create index money_age_idx on member_tb (money, age); -- 0.031초 -- 인덱스로 행 걸러내면서 평균을 구하고 그 결과를 출력 select avg(age) from member_tb where money between 10000 and 20000;
    ❗
    복합 Index (Composite Index)
    데이터베이스에서 여러 개의 컬럼(열)들을 조합하여 인덱스를 생성하는 것
    단일 인덱스(Single Index)가 한 개의 컬럼에 대해 생성되는 것과는 달리, 복합 인덱스는 여러 개의 컬럼을 함께 사용하여 인덱스를 생성
     
    Share article
    Contents
    1. Dummy data settingIndex 생성UK 생성복합 Index

    parangdajavous

    RSS·Powered by Inblog