[Index] MySQL ์„ฑ๋Šฅ ์ตœ์ ํ™” (+์‹คํ–‰ ๊ณ„ํš)

์ด๋ฒˆ ๊ธ€์—์„  MySQL 8.0๊ณผ ๊ธฐ๋ณธ ์Šคํ† ๋ฆฌ์ง€ ์—”์ง„์ธ InnoDB๋ฅผ ์‚ฌ์šฉํ•  ๊ฒƒ์ด๊ณ  ์ธ๋ฑ์Šค๋ฅผ ํ™œ์šฉํ•œ ์ฟผ๋ฆฌ ์ตœ์ ํ™”๋ฅผ ์ง„ํ–‰ํ•  ์˜ˆ์ •์ด๋‹ค. 

 

 

INDEX์— ๋Œ€ํ•ด ์ฒ˜์Œ ๋“ค์–ด๋ณด๊ฑฐ๋‚˜ ํ•™์Šตํ•˜๊ณ ์‹ถ๋‹ค๋ฉด ์•„๋ž˜ ๊ธ€์„ ์ฐธ๊ณ  ๋ฐ”๋žŒ

https://dgjinsu.tistory.com/38

 

[INDEX] ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์ธ๋ฑ์Šค ํŒŒํ—ค์น˜๊ธฐ

1. ์ธ๋ฑ์Šค๋ž€? ์ธ๋ฑ์Šค๋ž€ ์ถ”๊ฐ€์ ์ธ ์“ฐ๊ธฐ ์ž‘์—…๊ณผ ์ €์žฅ ๊ณต๊ฐ„์„ ํ™œ์šฉํ•˜์—ฌ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ํ…Œ์ด๋ธ”์˜ ๊ฒ€์ƒ‰ ์†๋„๋ฅผ ํ–ฅ์ƒ์‹œํ‚ค๊ธฐ ์œ„ํ•œ ์ž๋ฃŒ๊ตฌ์กฐ์ด๋‹ค. ๋งŒ์•ฝ ์šฐ๋ฆฌ๊ฐ€ ์ฑ…์—์„œ ์›ํ•˜๋Š” ๋‚ด์šฉ์„ ์ฐพ๋Š”๋‹ค๊ณ  ํ•˜๋ฉด, ์ฑ…์˜

dgjinsu.tistory.com

 

 

1. ์‹คํ–‰ ๊ณ„ํš

์‹คํ–‰ ๊ณ„ํš๋„ ์ •๋ง ์—ฌ๋Ÿฌ๊ฐ€์ง€๊ฐ€ ์žˆ์ง€๋งŒ ๊ฐ€์žฅ ์ค‘์š”ํ•˜๊ณ  ๋งŽ์ด ๋‚˜์˜ค๋Š” 3๊ฐ€์ง€๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.

 

- all: ํ…Œ์ด๋ธ” ์ „์ฒด๋ฅผ ์Šค์บ”

 

 

full table scan์„ ์˜๋ฏธํ•œ๋‹ค. full table scan์„ ํ•˜๋Š” ๊ฒฝ์šฐ๋Š” ๋‘๊ฐ€์ง€๊ฐ€ ์žˆ๋‹ค.  

 

1. ์ธ๋ฑ์Šค๊ฐ€ ์—†์–ด์„œ full table scan ํ•˜๋Š” ๊ฒฝ์šฐ

2. ์ธ๋ฑ์Šค๊ฐ€ ์žˆ์ง€๋งŒ full table scan ํ•˜๋Š” ๊ฒฝ์šฐ

 

๋‘๋ฒˆ์งธ ๊ฒฝ์šฐ๋Š” ์˜์•„ํ• ์ˆ˜๋„ ์žˆ์ง€๋งŒ

์ธ๋ฑ์Šค๊ฐ€ ์žˆ์ง€๋งŒ ๋ฐ์ดํ„ฐ ์ „์ฒด์˜ ๊ฐœ์ˆ˜๊ฐ€ ์–ผ๋งˆ๋˜์ง€ ์•Š๊ฑฐ๋‚˜

์ธ๋ฑ์Šค๊ฐ€ ์žˆ์ง€๋งŒ ์ฝ๊ณ ์ž ํ•˜๋Š” ๋ฐ์ดํ„ฐ๊ฐ€ 25%๊ฐ€ ๋„˜์–ด๊ฐ„๋‹ค๋ฉด full table scan์ด ์ผ์–ด๋‚œ๋‹ค. 

 

 

- range: ์ธ๋ฑ์Šค๋ฅผ ์ด์šฉํ•˜์—ฌ ๋ฒ”์œ„ ๊ฒ€์ƒ‰์„ ํ•  ๋•Œ

 

 

์ด์ƒ์ ์œผ๋กœ ์ธ๋ฑ์Šค๋ฅผ ์ž˜ ๊ฑธ์—ˆ์„ ๋•Œ ๋‚˜ํƒ€๋‚˜๋Š” ์‹คํ–‰ ๊ณ„ํš์ด๋‹ค. ํ•„์š”ํ•œ ๋ถ€๋ถ„๋งŒ ๋ฐ์ดํ„ฐ๋ฅผ ์ฝ๊ธฐ ๋•Œ๋ฌธ์— disk io๋ฅผ ์ค„์ผ ์ˆ˜ ์žˆ๋‹ค. 

 

 

- index: ์ธ๋ฑ์Šค ์ „์ฒด๋ฅผ ์Šค์บ”ํ•  ๋•Œ 

 

 

์‹คํ–‰ ๊ณ„ํš all ๊ณผ ์œ ์‚ฌํ•˜์ง€๋งŒ data๋ฅผ ๋‹ค ์ฝ๋Š”๊ฒƒ์ด ์•„๋‹Œ index๋ฅผ ์ „๋ถ€ ์ฝ๋Š” ๊ฒƒ์ด๋‹ค.

index๋Š” ๋ฐ์ดํ„ฐ๋ณด๋‹จ ํŒŒ์ผ ํฌ๊ธฐ๊ฐ€ ์ž‘๊ธฐ ๋•Œ๋ฌธ์— full table scan๋ณด๋‹จ ์„ฑ๋Šฅ์ด ์šฐ์ˆ˜ํ•˜๊ณ , ๋‹น์—ฐํžˆ range scan๋ณด๋‹ค๋Š” ์„ฑ๋Šฅ์ด ์ข‹์ง€ ๋ชปํ•˜๋‹ค.

 

 

2.1 ์ธ๋ฑ์Šค ์ ์šฉ ์‚ฌ๋ก€

์•„๋ž˜ ์‚ฌ์ง„๊ณผ ๊ฐ™์€ ํ…Œ์ด๋ธ”์ด ์žˆ์„ ๋•Œ ์–ด๋Š ์ปฌ๋Ÿผ์— ์ธ๋ฑ์Šค๋ฅผ ๊ฑธ์–ด์•ผํ• ๊นŒ??

 

์ด์ „ index ๊ฒŒ์‹œ๊ธ€์—๋„ ๋‚˜์™€์žˆ์—ˆ์ง€๋งŒ ์•„๋ž˜ ๋‘๊ฐ€์ง€ ์ •๋„๋กœ ๊ธฐ์ค€์„ ์ •ํ•  ์ˆ˜ ์žˆ๋‹ค. 

 

1. ์นด๋””๋„๋ฆฌํ‹ฐ๊ฐ€ ๋†’์€ ์ปฌ๋Ÿผ์— ๋Œ€ํ•ด ์ธ๋ฑ์Šค๋ฅผ ์ƒ์„ฑ

2. ์„œ๋น„์Šค์˜ ํŠน์„ฑ์ƒ ๋ฌด์—‡์— ๋Œ€ํ•œ ์กฐํšŒ๊ฐ€ ๋งŽ์ด ์ผ์–ด๋‚˜๋Š”์ง€ ํŒŒ์•…

 

nickname์— ๋Œ€ํ•œ ์กฐํšŒ๊ฐ€ ๋งŽ์ด ์ผ์–ด๋‚˜๊ณ  nickname ์ปฌ๋Ÿผ์˜ ์นด๋””๋„๋ฆฌํ‹ฐ ๋˜ํ•œ ๋†’๋‹ค๊ณ  ๊ฐ€์ •ํ•˜๊ณ  ์ง„ํ–‰ํ•˜๊ฒ ๋‹ค.  

 

 

- ๋”๋ฏธ๋ฐ์ดํ„ฐ insert

์‹คํ—˜์— ์•ž์„œ dummy data๋ฅผ ๋„ฃ์–ด์ค˜์•ผํ•œ๋‹ค. 

๋‚˜๊ฐ™์€ ๊ฒฝ์šฐ mysql workbench๋ฅผ ํ†ตํ•ด sql๋ฌธ์„ ์‹คํ–‰์‹œ์ผœ 10๋งŒ๊ฑด์˜ ๋ฐ์ดํ„ฐ๋ฅผ ๋„ฃ์–ด์ฃผ์—ˆ๋‹ค. 

DELIMITER $$
DROP PROCEDURE IF EXISTS loopInsert$$
 
CREATE PROCEDURE loopInsert()
BEGIN
    DECLARE i INT DEFAULT 1;
        
    WHILE i <= 100000 DO
        INSERT INTO crew(id, nickname, track, age)
          VALUES(i, concat('dgjinsu',i), 'backend', FLOOR(RAND() * 11) + 20);
        SET i = i + 1;
    END WHILE;
END$$
DELIMITER $$


CALL loopInsert;

 

 

- ์ธ๋ฑ์Šค๋ฅผ ๊ฑธ์ง€ ์•Š์•˜์„ ๋•Œ (์‹คํŒจ ์‚ฌ๋ก€)

SELECT * FROM test.crew c where c.nickname < "dgjinsu50000";

 

์œ„์™€ ๊ฐ™์ด nickname์„ ์กฐ๊ฑด์ ˆ๋กœ ๋‘๊ณ  ์ฟผ๋ฆฌ๋ฅผ ๋‚ ๋ ค๋ณด์•˜๋‹ค. 

์ด ๊ฑธ๋ฆฐ ์‹œ๊ฐ„์€ 0.109sec ์†Œ๋ชจ๋˜์—ˆ๊ณ  ์‹คํ–‰๊ณ„ํš์€ ALL๋กœ ๋‚˜ํƒ€๋‚ฌ๋‹ค

 

 

 

- ์ธ๋ฑ์Šค๋ฅผ ๊ฑธ์—ˆ์„ ๋•Œ (์‹คํŒจ ์‚ฌ๋ก€)

create index idx_crew_nickname ON test.crew (nickname);

 

create index๋ฌธ์œผ๋กœ nickname์— ์ธ๋ฑ์Šค๋ฅผ ๊ฑธ์–ด์ฃผ๊ณ  ๋‹ค์‹œ ๋˜‘๊ฐ™์€ ์ฟผ๋ฆฌ๋ฅผ ๋‚ ๋ ค๋ณด์ž.

 

๋˜‘๊ฐ™์ด ALL์ด ๋‚˜์™”๋‹ค. ์™œ ๊ทธ๋Ÿด๊นŒ?

 

์•„๊นŒ ์œ„์—์„œ๋„ ๋งํ–ˆ๋“ฏ์ด ์ธ๋ฑ์Šค๊ฐ€ ์žˆ์ง€๋งŒ ์ฝ๊ณ ์ž ํ•˜๋Š” ๋ฐ์ดํ„ฐ๊ฐ€ 25%๊ฐ€ ๋„˜์–ด๊ฐ„๋‹ค๋ฉด full table scan์ด ์ผ์–ด๋‚œ๋‹ค. 10๋งŒ๊ฑด์˜ ๋ฐ์ดํ„ฐ๋ฅผ ๋„ฃ์–ด๋‘์—ˆ๊ณ  5๋งŒ๊ฑด์˜ ๋ฐ์ดํ„ฐ๋ฅผ ์กฐํšŒํ•˜๋‹ˆ ๋‹น์—ฐํžˆ ์‹คํ–‰ ๊ณ„ํš์ด ALL์ด ๋‚˜์™”๋‹ค. 

 

 

 

- ์ธ๋ฑ์Šค๋ฅผ ๊ฑธ์ง€ ์•Š์•˜์„ ๋•Œ 

์ด๋ฒˆ์—” 100๋งŒ๊ฑด์˜ ๋ฐ์ดํ„ฐ๋กœ ๋Š˜๋ฆฌ๊ณ  ์ด๋ฒˆ์—” age๊ฐ€ 21 ๋ฏธ๋งŒ์ธ ๋ฐ์ดํ„ฐ๋ฅผ ์กฐํšŒํ•˜์˜€๋‹ค. 

 

๋‹ค์Œ๊ณผ ๊ฐ™์ด ์•ฝ 9๋งŒ๊ฑด์˜ ๋ฐ์ดํ„ฐ๊ฐ€ ์กฐํšŒ๋˜์—ˆ๊ณ  0.984 sec์ด ๊ฑธ๋ ธ๋‹ค. 

์‹คํ–‰ ๊ณ„ํš์€ ์—ญ์‹œ ALL ์ด๋‹ค. 

 

- ์ธ๋ฑ์Šค๋ฅผ ๊ฑธ์—ˆ์„ ๋•Œ

CREATE INDEX idx_crew_age ON test.crew (age);

 

์ด๋ฒˆ์—” age์— ์ธ๋ฑ์Šค๋ฅผ ๊ฑธ์–ด์ฃผ๊ณ  ๋‹ค์‹œ ๋˜‘๊ฐ™์€ ์ฟผ๋ฆฌ๋ฅผ ๋‚ ๋ ค๋ณด์ž. 

๋˜‘๊ฐ™์ด 9๋งŒ๊ฑด์˜ ๋ฐ์ดํ„ฐ๊ฐ€ ์กฐํšŒ๋˜์—ˆ๊ณ  0.719 sec์ด ๊ฑธ๋ ธ๋‹ค. 

 

์‹คํ–‰ ๊ณ„ํš์€ range๋กœ ๋ฐ”๋€Œ์—ˆ๋‹ค.

 

rows๋Š” ํ™•์ธํ•˜๋Š” row์˜ ์ˆ˜ ์ด๋‹ค. ์ธ๋ฑ์Šค๋ฅผ ๊ฑธ๊ธฐ ์ „์—” 997090 ํ–‰์„ ํƒ์ƒ‰ํ–ˆ์ง€๋งŒ ์ด๋ฒˆ์—” 181552์˜ ํ–‰์„ ํƒ์ƒ‰ํ–ˆ๋‹ค. 

 

 

 

 

 

2.2 ์ธ๋ฑ์Šค ์ ์šฉ ์‚ฌ๋ก€

- ๋ณตํ•ฉ ์ธ๋ฑ์Šค๋ž€?

๋‘๊ฐœ ์ด์ƒ์˜ ์ปฌ๋Ÿผ์„ ํ•ฉ์ณ์„œ ์ธ๋ฑ์Šค๋ฅผ ๋งŒ๋“œ๋Š” ๊ฒƒ์ด๋‹ค.

ํ•˜๋‚˜์˜ ์ปฌ๋Ÿผ์œผ๋กœ ์ธ๋ฑ์Šค๋ฅผ ๋งŒ๋“ค์—ˆ์„ ๋•Œ ๋ณด๋‹ค ๋” ์ ์€ ๋ฐ์ดํ„ฐ ๋ถ„ํฌ๋ฅผ ๋ณด์—ฌ ํƒ์ƒ‰ํ•  ๋ฐ์ดํ„ฐ ์ˆ˜๊ฐ€ ์ค„์–ด๋“ฌ

๊ฒฐํ•ฉ ์ธ๋ฑ์Šค, ๋‹ค์ค‘ ์ปฌ๋Ÿผ ์ธ๋ฑ์Šค, Composite Index๋ผ๊ณ ๋„ ๋ถˆ๋ฆฐ๋‹ค.

 

๋ณตํ•ฉ ์ธ๋ฑ์Šค๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์•„๋ž˜์™€ ๊ฐ™์ด ์ •๋ ฌ๋œ๋‹ค.

age, nickname ๋‘ ์ปฌ๋Ÿผ์„ ๋ณตํ•ฉ ์ธ๋ฑ์Šค๋กœ ์ •์˜ํ•œ ์˜ˆ์‹œ์ด๋‹ค. 

 

๋ณตํ•ฉ ์ธ๋ฑ์Šค๋Š” ์กฐ์‹ฌํžˆ ์‚ฌ์šฉํ•ด์•ผ ํ•œ๋‹ค.

๋งŒ์•ฝ age๋ฅผ ๊ธฐ์ค€์œผ๋กœ ์ฟผ๋ฆฌ๋ฅผ ๋‚ ๋ฆฐ๋‹ค๋ฉด ๊ทธ๋ƒฅ ์ธ๋ฑ์Šค๋ฅผ ๊ฑธ์—ˆ์„ ๋•Œ์™€ ๋น„์Šทํ•œ ์„ฑ๋Šฅ์„ ๋ณด์ผ ๊ฒƒ์ด๋‹ค.

age์™€ nickname์„ ์‚ฌ์šฉํ•˜์—ฌ ์ฟผ๋ฆฌ๋ฅผ ๋‚ ๋ฆฐ๋‹ค๋ฉด ๊ธฐ์กด๋ณด๋‹ค ํ›จ์”ฌ ์ข‹์€ ์„ฑ๋Šฅ์„ ๋ณด์ผ ๊ฒƒ์ด๋‹ค. 

 

ํ•˜์ง€๋งŒ nickname๋งŒ์„ ์กฐ๊ฑด์œผ๋กœ ์ฟผ๋ฆฌ๋ฅผ ๋‚ ๋ฆฐ๋‹ค๋ฉด ์–ด๋–ป๊ฒŒ ๋ ๊นŒ??

์œ„ ์‚ฌ์ง„์—์„œ ๋ณผ ์ˆ˜ ์žˆ๋“ฏ์ด ์ „์ฒด์ ์œผ๋กœ ๋ณด๋ฉด nickname์€ ์ •์—ด๋˜์–ด์žˆ์ง€ ์•Š๋‹ค. ๊ฐ™์€ age์— ํ•œ์—์„œ๋งŒ ์ •๋ ฌ๋œ ํ˜•ํƒœ์ด๋‹ค. 

 

๋”ฐ๋ผ์„œ full table scan์ด ์ผ์–ด๋‚œ๋‹ค. 

 

๋ณตํ•ฉ ์ธ๋ฑ์Šค๋ฅผ ๊ฑฐ๋Š” ๋ฐฉ๋ฒ•์€ ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.

CREATE INDEX idx_crew_age_nickname ON test.crew (age, nickname);

 

 

 

 

2.3 ์ธ๋ฑ์Šค ์ ์šฉ ์‚ฌ๋ก€

- ์ปค๋ฒ„๋ง ์ธ๋ฑ์Šค๋ž€?

์ธ๋ฑ์Šค๋กœ ์„ค์ •ํ•œ ์ปฌ๋Ÿผ๋งŒ ์ฝ์–ด ์ฟผ๋ฆฌ๋ฅผ ๋ชจ๋‘ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๋Š” ์ธ๋ฑ์Šค์ด๋‹ค. 

๋ถˆํ•„์š”ํ•œ ๋””์Šคํฌ I/O๋ฅผ ์ค„์—ฌ ์กฐํšŒ ์‹œ๊ฐ„์„ ๋‹จ์ถ•ํ•  ์ˆ˜ ์žˆ๋‹ค. 

 

 ์ธ๋ฑ์Šค ์ ์šฉ ์‚ฌ๋ก€ 2.1 ์—์„œ ์ธ๋ฑ์Šค๋ฅผ ๊ฑธ์—ˆ์ง€๋งŒ 20% ์ด์ƒ์˜ ๋ฐ์ดํ„ฐ๋ฅผ ์กฐํšŒํ•ด์•ผ ํ•˜๋Š” ์ผ์ด ์ƒ๊ฒจ full table scan์ด ์ผ์–ด๋‚ฌ์—ˆ๋‹ค. 

์ด๋ฅผ ์ธ๋ฑ์Šค๋งŒ ์ฝ๋Š” ๋ฐฉ์‹์œผ๋กœ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ๋‹ค. 

 

ํ˜„์žฌ nickname์„ ์ธ๋ฑ์Šค๋กœ ๊ฑธ์–ด๋‘์—ˆ๋‹ค. 

๋‹ค์Œ๊ณผ ๊ฐ™์ด ์กฐํšŒํ•˜๋ฉด ์–ด๋–ป๊ฒŒ ๋ ๊นŒ??

explain SELECT * FROM test.crew c where c.nickname < "dgjinsu9";

 

dgjinsu1.. ๋ถ€ํ„ฐ dgjinsu9.. ๊นŒ์ง€ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— 90% ๊ฐ€๋Ÿ‰์˜ ๋ฐ์ดํ„ฐ๋ฅผ ์กฐํšŒํ•˜๋Š” ๊ฒฝ์šฐ์ด๋‹ค. 

์‹คํ–‰ ๊ณ„ํš์„ ์‚ดํŽด๋ณด๋ฉด ์—ญ์‹œ ALL์ด๋‹ค. 

 

 

์—ฌ๊ธฐ์„œ select ์ ˆ์— ์ธ๋ฑ์Šค๋งŒ ์กฐํšŒํ•˜๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๊ฒฐ๊ณผ๊ฐ€ ๋‚˜ํƒ€๋‚œ๋‹ค. 

explain SELECT c.nickname FROM test.crew c where c.nickname < "dgjinsu9";

 

 

์ปค๋ฒ„๋ง ์ธ๋ฑ์Šค๋ฅผ ํƒ€๊ฒŒ ๋˜๋ฉด Extra ์ปฌ๋Ÿผ์— Using index๊ฐ€ ํ‘œ์‹œ๋œ๋‹ค. 

 

 

pk ๊ฐ’์ธ id๋„ ํ•จ๊ป˜ ์กฐํšŒํ•œ๋‹ค๋ฉด ์–ด๋–ค ๊ฒฐ๊ณผ๊ฐ€ ์ผ์–ด๋‚ ๊นŒ? 

 

๋งˆ์ฐฌ๊ฐ€์ง€๋กœ type์€ range์ด๊ณ  Extra์—” Using index๊ฐ€ ๋‚˜ํƒ€๋‚œ๋‹ค. 

 

๋ณตํ•ฉ ์ธ๋ฑ์Šค๋กœ ์„ค์ •ํ•˜์ง€ ์•Š์•˜๋Š”๋ฐ ์™œ ๊ฐ™์€ ๊ฒฐ๊ณผ๊ฐ€ ๋‚˜์˜จ ๊ฒƒ์ผ๊นŒ??

 

 

์ด์œ ๋Š” InnoDB์˜ ์„ธ์ปจ๋”๋ฆฌ ์ธ๋ฑ์Šค์˜ ํŠน์ˆ˜ํ•œ ๊ตฌ์กฐ ๋•๋ถ„์ด๋‹ค. 

 

๋ฆฌํ”„ ๋…ธ๋“œ์—๋Š” ์‹ค์ œ ๋ ˆ์ฝ”๋“œ ์ฃผ์†Œ๊ฐ€ ์•„๋‹Œ ํด๋Ÿฌ์Šคํ„ฐ๋“œ ์ธ๋ฑ์Šค๊ฐ€ ๊ฑธ๋ฆฐ PK๋ฅผ ์ฃผ์†Œ ๊ฐ€์ง„๋‹ค. 

๊ทธ๋ ‡๊ธฐ ๋•Œ๋ฌธ์— nickname, id ๋ชจ๋‘ ํ™œ์šฉ ๊ฐ€๋Šฅํ–ˆ๋˜ ๊ฒƒ์ด๋‹ค. 

 

 

 

2.4 ์ธ๋ฑ์Šค ์ ์šฉ ์‚ฌ๋ก€

- ์ธ๋ฑ์…˜ ์ปจ๋””์…˜ ํ‘ธ์‹œ๋‹ค์šด

 

์•„๋ž˜์™€ ๊ฐ™์€ ์ฟผ๋ฆฌ๋ฅผ ๋‚ ๋ฆฐ๋‹ค๊ณ  ๊ฐ€์ •ํ•ด๋ณด์ž.

์ธ๋ฑ์Šค๋Š” type ๊ธฐ์ค€์œผ๋กœ ์ƒ์„ฑํ–ˆ๋‹ค. 

 

์‹คํ–‰ ๊ณ„ํš์€ ๋‹ค์Œ๊ณผ ๊ฐ™๊ณ  ์ธ๋ฑ์Šค๋ฅผ ์ž˜ ํƒ„๊ฑธ ๋ณผ ์ˆ˜ ์žˆ๋‹ค. ํ•˜์ง€๋งŒ Extraํƒญ์„ ์‚ดํŽด๋ณด๋ฉด Using where๋กœ ํ‘œ์‹œ๋œ๋‹ค. 

 

Extra์ปฌ๋Ÿผ์—๋Š” ์ฟผ๋ฆฌ์˜ ์‹คํ–‰ ๊ณ„ํš์—์„œ ์„ฑ๋Šฅ์— ๊ด€๋ จ๋œ ์ค‘์š”ํ•œ ๋‚ด์šฉ์ด ํ‘œ์‹œ๋œ๋‹ค. ๋‚ด๋ถ€์ ์ธ ์ฒ˜๋ฆฌ ์•Œ๊ณ ๋ฆฌ์ฆ˜์— ๋Œ€ํ•ด ์กฐ๊ธˆ ๋” ๊นŠ์€ ๋‚ด์šฉ์„ ํฌํ•จํ•œ๋‹ค. 

 

Using  where ๋ž€,

InnoDB ์Šคํ† ๋ฆฌ์ง€ ์—”์ง„์„ ํ†ตํ•ด ํ…Œ์ด๋ธ”์—์„œ ํ–‰์„ ๊ฐ€์ ธ์˜จ ๋’ค, MySQL ์—”์ง„์—์„œ ์ถ”๊ฐ€์ ์ธ ์ฒดํฌ ์กฐ๊ฑด์„ ํ™œ์šฉํ•˜์—ฌ ํ–‰์˜ ๋ฒ”์œ„๋ฅผ ์ถ•์†Œํ•œ ๊ฒƒ์ด๋‹ค. 

 

์ด๊ฑธ ๊ทธ๋ฆผ์„ ์‚ดํŽด๋ณด๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.

 

 

์ธ๋ฑ์Šค๋กœ ๊ฑธ๋ฆฐ 50๋งŒ๊ฐœ์˜ ๋ฐ์ดํ„ฐ๋ฅผ mysql์—”์ง„์œผ๋กœ ์ „๋‹ฌํ•˜๊ณ  ์ธ๋ฑ์Šค์— ๊ฑธ๋ฆฌ์ง€ ์•Š์€ created_at ์กฐ๊ฑด์— ๋Œ€ํ•ด 9์ฒœ๊ฐœ์˜ ๋ฐ์ดํ„ฐ๋ฅผ ํ•„ํ„ฐ๋งํ•œ๋‹ค. mysql์—”์ง„์˜ ์ž…์žฅ์—์„  InnoDB ์Šคํ† ๋ฆฌ์ง€ ์—”์ง„์—์„œ ๋ถˆํ•„์š”ํ•œ ๋งŽ์€ ๋ฐ์ดํ„ฐ๋ฅผ ๋ฐ›์€ ๊ฒƒ์ด๋‹ค.

 

์ด๋ฅผ ๋ณตํ•ฉ ์ธ๋ฑ์Šค๋ฅผ ํ†ตํ•ด ๊ฐœ์„  ๊ฐ€๋Šฅํ•˜๋‹ค. 

 

type, created_at ์œผ๋กœ ๋ณตํ•ฉ์ธ๋ฑ์Šค๋ฅผ ์ƒ์„ฑํ•˜๊ณ  ๋‹ค์‹œ ์ฟผ๋ฆฌ๋ฅผ ๋‚ ๋ ค๋ณด๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์‹คํ–‰๊ณ„ํš์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค. 

 

 

Extra ์ปฌ๋Ÿผ์˜ Using Index Condition์€ ์ธ๋ฑ์Šค ์ปจ๋””์…˜ ํ‘ธ์‹œ๋‹ค์šด ์œผ๋กœ ์ธํ•ด ํ‘œ์‹œ๋œ๋‹ค. 

์ธ๋ฑ์Šค ์ปจ๋””์…˜ ํ‘ธ์‹œ๋‹ค์šด(ICP, Index Condition Pushdown)์ด๋ž€, MySQL์ด ์ธ๋ฑ์Šค๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ํ…Œ์ด๋ธ”์—์„œ ํ–‰์„ ๊ฒ€์ƒ‰ํ•˜๋Š” ๊ฒฝ์šฐ์˜ ์ตœ์ ํ™”๋ฅผ ์˜๋ฏธํ•œ๋‹ค. 

 

ICP๋ฅผ ํ™œ์„ฑํ™”ํ•˜๊ณ  ์ธ๋ฑ์Šค์˜ ์ปฌ๋Ÿผ๋งŒ ์‚ฌ์šฉํ•˜์—ฌ where ์กฐ๊ฑด์˜ ์ผ๋ถ€๋ฅผ ํ‰๊ฐ€ํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒฝ์šฐ MSQL์—”์ง„์€ where ์กฐ๊ฑด ๋ถ€๋ถ„์„ ์Šคํ† ๋ฆฌ์ง€ ์—”์ง„์œผ๋กœ ํ‘ธ์‹œํ•œ๋‹ค. 

 

ICP๋Š” ์ตœ์‹  ๋ฒ„์ „์˜ MySQL์„ ์‚ฌ์šฉํ•  ๊ฒฝ์šฐ ๊ธฐ๋ณธ์ ์œผ๋กœ ํ™œ์„ฑํ™”๋จ.

 

์œ„ ๊ณผ์ •์„ ๊ทธ๋ฆผ์œผ๋กœ ์‚ดํŽด๋ณด๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.

 

 

 

 

์ฐธ๊ณ 

https://www.youtube.com/watch?v=nvnl9YgnON8