[DB ์„ฑ๋Šฅ ๋ถ„์„] EXPLAIN ๊ธฐ๋ฐ˜ ์ฟผ๋ฆฌ ์ง„๋‹จ ๋ฐ ์ธ๋ฑ์Šค ๊ฐœ์„  ํฌ์ธํŠธ ์ •๋ฆฌ

2025. 10. 30. 15:09ใ†๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค

728x90

์—ด์ผํ•˜๋Š” ๊ฐœ๋ฐœ์ž ํ‚คํ‹ฐ

 

์ตœ๊ทผ์— ์‹œ๊ฐ„์  ์—ฌ์œ ๊ฐ€ ์ƒ๊ธฐ๋ฉด์„œ, ์šด์˜ ์ค‘์ธ ์„œ๋น„์Šค์˜ ์ฃผ์š” ์ฟผ๋ฆฌ๋“ค์„ ์ ๊ฒ€ํ•ด ์„ฑ๋Šฅ ๊ฐœ์„ ์ด ๊ฐ€๋Šฅํ•œ ๋ถ€๋ถ„์ด ์žˆ๋Š”์ง€ ํ™•์ธํ•ด๋ณด๋ ค๊ณ  ํ•œ๋‹ค. 

์ด๋ฅผ ์œ„ํ•ด EXPLAIN ์„ ํ™œ์šฉํ•ด ์ฃผ์š” SELECT ์ฟผ๋ฆฌ์˜ ์‹คํ–‰ ๊ณ„ํš์„ ๋ถ„์„ํ•˜๊ณ , ์ธ๋ฑ์Šค ํšจ์œจ์„ฑ๊ณผ ์กฐ์ธ ์ˆœ์„œ ๋ฐ ์กฐ๊ฑด ์ตœ์ ํ™” ๋ฐฉํ–ฅ์„ ์ •๋ฆฌํ•˜๋ ค๊ณ  ํ•œ๋‹ค. 

 

๐Ÿ‘‰๐Ÿป ์ด๋ฒˆ ์ง„๋‹จ์„ ํ†ตํ•ด ์‹ค์ œ ์šด์˜ ํ™˜๊ฒฝ์—์„œ์˜ ์ธ๋ฑ์Šค ์„ค๊ณ„๊ฐ€ ์ ์ ˆํžˆ ์ด๋ฃจ์–ด์กŒ๋Š”์ง€ ๊ฒ€ํ† ํ•จ์œผ๋กœ์จ ์„œ๋น„์Šค ์ „๋ฐ˜์˜ ์„ฑ๋Šฅ ์•ˆ์ •์„ฑ์„ ๋†’์ด๋Š” ๊ฒƒ์ด ๋ชฉํ‘œ๋‹ค ! 

 

 

๐Ÿ“˜ ๋ถ„์„ ๋ฐฉ๋ฒ• 

์ฃผ์š” SELECT ์ฟผ๋ฆฌ๋“ค์˜ ์‹คํ–‰ ๊ณ„ํš์„ EXPLAIN ์œผ๋กœ ํ™•์ธํ•˜๋ฉฐ, ๊ฐ ์ฟผ๋ฆฌ๊ฐ€ ์‹ค์ œ๋กœ ์–ด๋–ค ๋ฐฉ์‹์œผ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ์ฝ๊ณ  ์กฐ์ธํ•˜๋Š”์ง€๋ฅผ ์ ๊ฒ€ํ–ˆ๋‹ค. 

type, possible_keys, key, rows, Extra ํ•ญ๋ชฉ์„ ์ค‘์‹ฌ์œผ๋กœ ์ฟผ๋ฆฌ์˜ ์ ‘๊ทผ ๋ฐฉ์‹(ํ’€์Šค์บ”, ์ธ๋ฑ์Šค ์Šค์บ”, ์กฐ์ธ ๋ฐฉ์‹ ๋“ฑ)์„ ๋ถ„์„ํ•˜๊ณ  ์ธ๋ฑ์Šค ํšจ์œจ์„ฑ๊ณผ ์กฐ์ธ ์ˆœ์„œ๊ฐ€ ์ ์ ˆํžˆ ์„ ํƒ๋˜๊ณ  ์žˆ๋Š”์ง€ ํ™•์ธํ–ˆ๋‹ค. 

๋˜ํ•œ Using temporary, Using filesort์™€ ๊ฐ™์ด ์ •๋ ฌ, ์ง‘๊ณ„ ์‹œ ์ถ”๊ฐ€ ๋น„์šฉ์ด ๋ฐœ์ƒํ•˜๋Š” ํ•ญ๋ชฉ์„ ์ฒดํฌํ•˜์—ฌ ์ธ๋ฑ์Šค ์ถ”๊ฐ€ ๋˜๋Š” WHERE ์กฐ๊ฑด ๊ตฌ์กฐ ๋ณ€๊ฒฝ์„ ํ†ตํ•œ ๊ฐœ์„  ๊ฐ€๋Šฅ์„ฑ์„ ๊ฒ€ํ† ํ•˜์˜€๋‹ค. 

 

 

โœ๏ธ EXPLAIN ๊ฐœ๋… ๋ฐ ์ฃผ์š” ํƒ€์ž… ์ •๋ฆฌ 

 

EXPLAIN ์ด๋ž€ ? 

MySQL ์—์„œ EXPLAIN ์€ ์ฟผ๋ฆฌ์˜ ์‹คํ–‰ ๊ณ„ํš์„ ํ™•์ธํ•˜๊ธฐ ์œ„ํ•œ ๋ช…๋ น์–ด๋กœ, ์˜ตํ‹ฐ๋งˆ์ด์ €๊ฐ€ ์ฟผ๋ฆฌ๋ฅผ ์–ด๋–ป๊ฒŒ ํ•ด์„ํ•˜๊ณ , ์–ด๋–ค ์ˆœ์„œ๋กœ ํ…Œ์ด๋ธ”์„ ์ฝ๋Š”์ง€๋ฅผ ๋ณด์—ฌ์ค€๋‹ค. 

์ฆ‰, ์ฟผ๋ฆฌ๊ฐ€ ์‹ค์ œ๋กœ ์ธํ…์Šค๋ฅผ ํƒ€๋Š”์ง€, ํ’€์Šค์บ”์„ ํ•˜๋Š”์ง€, ์กฐ์ธ ์ˆœ์„œ๊ฐ€ ์–ด๋–ป๊ฒŒ ๋˜๋Š”์ง€ ๋ฏธ๋ฆฌ ์˜ˆ์ธกํ•  ์ˆ˜ ์žˆ๋Š” ๋„๊ตฌ์ด๋‹ค. 

 

ํ•ญ๋ชฉ  ์„ค๋ช… 
id ์ฟผ๋ฆฌ ์‹คํ–‰ ๋‹จ๊ณ„ ๋ฒˆํ˜ธ. ์„œ๋ธŒ์ฟผ๋ฆฌ๋‚˜ ํŒŒ์ƒ์ฟผ๋ฆฌ๊ฐ€ ๋งŽ์„์ˆ˜๋ก ์—ฌ๋Ÿฌ id๊ฐ€ ์ƒ๊น€.
select_type ๋‹จ์ˆœ SELECT์ธ์ง€, ์„œ๋ธŒ์ฟผ๋ฆฌ์ธ์ง€, UNION ๋“ฑ์ธ์ง€ ๊ตฌ๋ถ„.
table ์ ‘๊ทผํ•˜๋Š” ํ…Œ์ด๋ธ”๋ช… ๋˜๋Š” ํŒŒ์ƒ ํ…Œ์ด๋ธ”(alias).
type ์กฐ์ธ ๋ฐฉ์‹(=์ ‘๊ทผ ๋ฐฉ์‹). ์ฟผ๋ฆฌ ์„ฑ๋Šฅ ํŒ๋‹จ์˜ ํ•ต์‹ฌ ์ง€ํ‘œ.
possible_keys ์˜ตํ‹ฐ๋งˆ์ด์ €๊ฐ€ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค๊ณ  ํŒ๋‹จํ•œ ์ธ๋ฑ์Šค ํ›„๋ณด.
key ์‹ค์ œ๋กœ ์‚ฌ์šฉ๋œ ์ธ๋ฑ์Šค. NULL์ด๋ฉด ์ธ๋ฑ์Šค ๋ฏธ์‚ฌ์šฉ.
rows ์˜ตํ‹ฐ๋งˆ์ด์ €๊ฐ€ ์˜ˆ์ธกํ•œ ์Šค์บ” ํ–‰ ์ˆ˜(๊ฐ’์ด ์ž‘์„์ˆ˜๋ก ํšจ์œจ์ ).
Extra ์ถ”๊ฐ€ ์ž‘์—… ์ •๋ณด (์ž„์‹œ ํ…Œ์ด๋ธ” ์ƒ์„ฑ, ์ •๋ ฌ ๋“ฑ).

 

type (์ ‘๊ทผ ๋ฐฉ์‹) 

: type ์€ ์‹คํ–‰ ๊ณ„ํš์—์„œ ๊ฐ€์žฅ ์ค‘์š”ํ•˜๊ฒŒ ๋ณด๋Š” ํ•ญ๋ชฉ์œผ๋กœ, ๊ฐ’์ด ALL ์— ๊ฐ€๊นŒ์šธ์ˆ˜๋ก ๋А๋ฆฌ๊ณ , const์— ๊ฐ€๊นŒ์šธ์ˆ˜๋ก ํšจ์œจ์ ์ธ ์ ‘๊ทผ์ด๋‹ค. 

type ์˜๋ฏธ  ์„ฑ๋Šฅ  ์„ค๋ช… 
system ๋‹จ 1ํ–‰๋งŒ ์กด์žฌํ•˜๋Š” ํ…Œ์ด๋ธ” โญ๏ธ์ตœ์ƒ ํ…Œ์ŠคํŠธ์šฉ·์กฐํšŒ์šฉ ์ž‘์€ ํ…Œ์ด๋ธ”
const PK ๋˜๋Š” UNIQUE ์ธ๋ฑ์Šค๋กœ ๋‹จ์ผ ํ–‰ ์กฐํšŒ โญ๏ธ WHERE id = 1 ํ˜•ํƒœ
eq_ref JOIN ์‹œ ์–‘์ชฝ์ด PK/UNIQUE ์ธ๋ฑ์Šค๋กœ 1:1 ๋งค์นญ โญ๏ธ ์กฐ์ธ ์ตœ์ 
ref ์ธ๋ฑ์Šค๋กœ ๋งค์นญํ•˜์ง€๋งŒ ์—ฌ๋Ÿฌ ํ–‰ ๊ฐ€๋Šฅ โœ… ์ผ๋ฐ˜์ ์ธ FK ์กฐํšŒ
range ์ธ๋ฑ์Šค๋ฅผ ์ด์šฉํ•œ ๋ฒ”์œ„ ์กฐํšŒ โœ… BETWEEN, <, >
index ์ธ๋ฑ์Šค ์ „์ฒด ์Šค์บ” (ํ…Œ์ด๋ธ”๋ณด๋‹ค ๋น ๋ฅด์ง€๋งŒ ์—ฌ์ „ํžˆ ๋งŽ์Œ) โš ๏ธ ์ธ๋ฑ์Šค๋งŒ ์ฝ์Œ
ALL ํ…Œ์ด๋ธ” ์ „์ฒด ์Šค์บ” โŒ ์ธ๋ฑ์Šค ๋ฏธ์‚ฌ์šฉ (์ตœ์•…)

 

๐Ÿ‘‰๐Ÿป ์—ฌ๊ธฐ์„œ ALL ์ด ๋‚˜์˜ค๋Š”๊ฒŒ ๊ฐ€์žฅ ์ตœ์•…,, ํ’€์Šค์บ”ํ•˜๊ณ  ์žˆ๋‹ค๋Š” ๋œป์ด๋‹ค. 

 

 

Extra ์ฃผ์š” ํ•ญ๋ชฉ 

: Extra ๋Š” ์ฟผ๋ฆฌ ์‹คํ–‰ ์ค‘ ์ถ”๊ฐ€์ ์ธ ์ž‘์—…์ด๋‚˜ ์ตœ์ ํ™” ์—ฌ๋ถ€๋ฅผ ์•Œ๋ ค์ฃผ๋Š” ๋ถ€๋ถ„์ด๋‹ค. 

Extra  ์˜๋ฏธ  ์กฐ์น˜ ๋ฐฉํ–ฅ 
Using where WHERE ์กฐ๊ฑด์œผ๋กœ ํ•„ํ„ฐ๋ง ์ค‘ ์ •์ƒ
Using index ์ปค๋ฒ„๋ง ์ธ๋ฑ์Šค ์‚ฌ์šฉ (ํ…Œ์ด๋ธ” ์ ‘๊ทผ ์—†์Œ) ํšจ์œจ์ 
Using temporary ์ž„์‹œ ํ…Œ์ด๋ธ” ์ƒ์„ฑ (GROUP BY ๋“ฑ) ์„ฑ๋Šฅ ์ €ํ•˜ ๊ฐ€๋Šฅ
Using filesort ์ •๋ ฌ ์ž‘์—… ๋ฐœ์ƒ (ORDER BY ๋“ฑ) ์ธ๋ฑ์Šค๋กœ ์ •๋ ฌ ์ฒ˜๋ฆฌ ๊ณ ๋ ค
Using join buffer (BNL) ๋ธ”๋ก ๋„ค์Šคํ‹ฐ๋“œ ๋ฃจํ”„ ์กฐ์ธ ๋ฐœ์ƒ ์กฐ์ธ ํ‚ค ์ธ๋ฑ์Šค ํ•„์š”
NULL ์ถ”๊ฐ€ ์ž‘์—… ์—†์Œ ์ •์ƒ

 

๐Ÿ‘‰๐Ÿป ORDER BY ๋“ฑ ๋•Œ๋ฌธ์— filesort ๊ฐ€ ์ผ์–ด๋‚˜๋ฉด ์ƒ๊ฐ๋ณด๋‹ค ์„ฑ๋Šฅ์ด ๋งŽ์ด ๋–จ์–ด์ง„๋‹ค,, ๋”ฐ๋ผ์„œ ์ธ๋ฑ์Šค๋กœ ์ •๋ ฌ ์ฒ˜๋ฆฌ๋ฅผ ๊ณ ๋ คํ•˜๋Š”๊ฒƒ์ด ์ข‹๋‹ค. 

 

 

 

๐Ÿ”Ž ๋ถ„์„ ์˜ˆ์‹œ 

* ํšŒ์‚ฌ ์ฟผ๋ฆฌ๋ฅผ ๊ณต๊ฐœํ•  ์ˆ˜๋Š” ์—†์œผ๋‹ˆ, ๊ธ€ ์ž‘์„ฑ์„ ์œ„ํ•ด ํ…Œ์ด๋ธ”/์ปฌ๋Ÿผ๋ช…์„ ์ „๋ถ€ ๋ณ€๊ฒฝํ•œ ์˜ˆ์‹œ์ž…๋‹ˆ๋‹ค.* 

 

1๏ธโƒฃ 

<select id="selectLatestLocation" parameterType="int" resultType="Location">
    SELECT *
    FROM LOCATIONS
    WHERE PARENT_ID = #{parentId}
    ORDER BY CREATED_AT DESC
    LIMIT 1
</select>

 

 

 

์ด ์ฟผ๋ฆฌ๋Š” ์ด์ „์— ์ธ๋ฑ์Šค๊ฐ€ PK ๋งŒ  ์„ค์ •๋˜์–ด ์žˆ๊ณ , ์•„๋ฌด๋Ÿฐ ์„ค์ •์ด ๋˜์–ด์žˆ์ง€ ์•Š์•˜๋‹ค. 

๋”ฐ๋ผ์„œ EXPLIAN ํ•ด๋ณธ ๊ฒฐ๊ณผ ํ’€์Šค์บ”์— ์‹ฌ์ง€์–ด filesort ๊นŒ์ง€ ์ด๋ค„์ ธ ๊ต‰์žฅํžˆ ์„ฑ๋Šฅ์ด ์•ˆ ์ข‹์€ ์ฟผ๋ฆฌ์ž„์„ ๋ฐœ๊ฒฌํ–ˆ๋‹ค. 

 

CREATE INDEX IDX_locations_parent_created
ON LOCATIONS (PARENT_ID, CREATED_AT DESC);

์ด๋ ‡๊ฒŒ ๋ณตํ•ฉ ์ธ๋ฑ์Šค๋กœ PARENT_ID, CREAT_AT ์„ ์ˆœ์„œ๋Œ€๋กœ ์„ ์–ธํ•ด์คฌ๊ณ , 

๊ทธ ํ›„์— ๋‹ค์‹œ EXPLAIN ํ•ด๋ณธ ๊ฒฐ๊ณผ ์˜ตํ‹ฐ๋งˆ์ด์ €๊ฐ€ ํ’€ ์Šค์บ” ๋Œ€์‹  ์ธ๋ฑ์Šค๋ฅผ ์„ ํƒํ–ˆ๊ณ , ์กฐํšŒ ์„ฑ๋Šฅ์ด ํ›จ์”ฌ ์ข‹์•„์ง์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ์—ˆ๋‹ค. 

(์ด๋•Œ ์ •๋ ฌ์„ ๋ณดํ†ต ๋‚ด๋ฆผ์ฐจ์ˆœ์œผ๋กœ ์กฐํšŒ๋ฅผ ํ•˜๊ณ  ์žˆ๊ธธ๋ž˜ DESC๋กœ ์„ค์ •ํ–ˆ๋‹ค.) 

 

๊ฐœ์„  ํ›„ EXPLAIN ์š”์•ฝ ๋น„๊ต

๊ตฌ๋ถ„ type key  rows  Extra 
Before ALL NULL 2๋งŒ+ Using where; Using filesort
After ref IDX_locations_parent_created ์ˆ˜์‹ญ~์ˆ˜๋ฐฑ Using where (filesort ์ œ๊ฑฐ

 

 

โœ… LEFT JOIN ์กฐ๊ฑด์ด ์˜ฌ๋ฐ”๋ฅด๋”๋ผ๋„ WHERE ์ ˆ ํ•„ํ„ฐ๋ง ์ปฌ๋Ÿผ์ด ์ธ๋ฑ์Šค๊ฐ€ ์—†์œผ๋ฉด ์กฐ์ธ ๋น„์šฉ์ด ๊ธ‰๊ฒฉํžˆ ์ฆ๊ฐ€ํ•จ   

โœ… ORDER BY ํŒจํ„ด์€ ๋ณตํ•ฉ ์ธ๋ฑ์Šค ์„ค๊ณ„๋กœ ์ •๋ ฌ ๋น„์šฉ์„ ํฌ๊ฒŒ ์ค„์ผ ์ˆ˜ ์žˆ์Œ 

 

 

2๏ธโƒฃ 

SELECT *
FROM LOCATION_REQUESTS
WHERE PARENT_ID = 'user_parent_001'
  AND CHILD_ID = 'user_child_002';

์ด ์ฟผ๋ฆฌ๋Š” ๋ถ€๋ชจ ์‚ฌ์šฉ์ž์™€ ์ž๋…€ ์‚ฌ์šฉ์ž์˜ ์œ„์น˜ ์š”์ฒญ ๋ฐ์ดํ„ฐ๋ฅผ ์กฐํšŒํ•˜๋Š” ๋กœ์ง์œผ๋กœ ๋‘ ๊ฐœ์˜ ์‚ฌ์šฉ์ž ID๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ๋‹จ์ผ ๋ ˆ์ฝ”๋“œ๋ฅผ ์กฐํšŒํ•œ๋‹ค. 

EXPLIAN ๊ฒฐ๊ณผ์—์„œ type = ALL ์ด ๋ฐœ์ƒํ•˜๊ณ  ์žˆ์—ˆ๊ณ , possible_keys, key ๊ฐ’ ๋ชจ๋‘ NULL  ์ƒํƒœ๋กœ ์ธ๋ฑ์Šค๊ฐ€ ์•„์˜ˆ ์กด์žฌํ•˜์ง€ ์•Š์•˜์Œ์„ ํ™•์ธํ–ˆ๋‹ค. 

 

CREATE INDEX IDX_location_request_parent_child
ON LOCATION_REQUESTS (PARENT_ID, CHILD_ID);

๋”ฐ๋ผ์„œ ์ด๋ ‡๊ฒŒ PARENT_ID, CHILD_ID๋กœ ๋ณตํ•ฉ ์ธ๋ฑ์Šค๋ฅผ ์„ค์ •ํ•ด ํ’€์Šค์บ” ๋ฐฉ์ง€๋ฅผ ํ•ด์คฌ๋‹ค. 

 

 

๊ฐœ์„  ํ›„ EXPLAIN ์š”์•ฝ ๋น„๊ต

๊ตฌ๋ถ„  type possible_keys key  rows Extra
Before ALL NULL NULL 35,200 Using where
After ref IDX_location_request_parent_child IDX_location_request_parent_child 1 Using where

 

type ALL ์—์„œ ref ๋กœ ๊ฐœ์„ ํ–ˆ์œผ๋ฉฐ, rows ๋ฅผ ๋ณด๋ฉด 35,200 ๊ฑด  ์กฐํšŒํ•˜๋˜ ๊ฒฐ๊ณผ๋ฅผ 1๋กœ ์ •ํ™•ํžˆ ๋งค์นญ๋  ์ˆ˜ ์žˆ๋„๋ก ํ–ˆ๋‹ค. 

 

 

3๏ธโƒฃ ์ธ๋ฑ์Šค ์ถ”๊ฐ€๊ฐ€ ๋ถˆํ•„์š”ํ•œ ์˜ˆ์‹œ  

SELECT *
FROM INQUIRIES
WHERE USER_ID = 'user_001'
ORDER BY CREATED_AT DESC;

 

 

์ด ์ฟผ๋ฆฌ์˜ ๊ฒฝ์šฐ์—๋Š” ์‚ฌ์šฉ์ž์˜ ๋ฌธ์˜ ๋‚ด์—ญ์„ ์กฐํšŒํ•˜๋Š” SELECT ๋ฌธ์œผ๋กœ ์‹ค์ œ ํ…Œ์ด๋ธ” ๋ฐ์ดํ„ฐ๋Š” ์•ฝ 700ํ–‰ ์ •๋„๋กœ ๋งค์šฐ ์ ์€ ํŽธ์ด์—ˆ๋‹ค. 

์‹คํ–‰ ๊ณ„ํš์„ ๋ณด๋ฉด type = ALL, key = NULL ๋กœ ํ‘œ์‹œ๋˜์–ด ์ธ๋ฑ์Šค๊ฐ€ ์‚ฌ์šฉ๋˜์ง€ ์•Š์•˜์ง€๋งŒ 

rows ๊ฐ’์ด 700์œผ๋กœ ์ž‘๊ธฐ ๋•Œ๋ฌธ์— ํ’€์Šค์บ”์˜ ๋น„์šฉ์ด ํฌ์ง€ ์•Š์•˜๋‹ค. 

๋”ฐ๋ผ์„œ ์ธ๋ฑ์Šค๊ฐ€ ์—†๋‹ค๊ณ  ํ•ด๋„ ์ „์ฒด ์Šค์บ”๋„ ๋น ๋ฅธ ์ƒํ™ฉ์ด๋ผ ์ธ๋ฑ์Šค๋ฅผ ๋”ฐ๋กœ ์ถ”๊ฐ€ํ•˜์ง€ ์•Š์•˜๋‹ค. 

 

โœ… ํ…Œ์ด๋ธ” ํฌ๊ธฐ๊ฐ€ ์ˆ˜๋ฐฑ ํ–‰ ์ˆ˜์ค€์ด๋ผ๋ฉด, ํ’€ ์Šค์บ”์ด ์ธ๋ฑ์Šค ํƒ์ƒ‰๋ณด๋‹ค ๋น ๋ฅผ ์ˆ˜ ์žˆ๋‹ค. 

โœ… ๊ทธ๋ฆฌ๊ณ  ์˜ตํ‹ฐ๋งˆ์ด์ €๊ฐ€ ํ†ต๊ณ„์ ์œผ๋กœ '์ธ๋ฑ์Šค ํƒ์ƒ‰ + ๋žœ๋ค I/O' ๋น„์šฉ์ด '์ˆœ์ฐจ I/O' ๋ณด๋‹ค ํฌ๋‹ค๊ณ  ํŒ๋‹จ๋˜๋ฉด ์ธ๋ฑ์Šค๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š”๋‹ค. 

 

โญ ์ธ๋ฑ์Šค๋ฅผ ํ•ญ์ƒ ์ถ”๊ฐ€ํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ ๋ฐ์ดํ„ฐ ์–‘์ด ๋งŽ๊ณ , ํ•„ํ„ฐ๋ง ๊ฒฐ๊ณผ๊ฐ€ ์ „์ฒด์˜ 10% ๋ฏธ๋งŒ์ผ ๋•Œ ๋งŒ๋“ค์–ด์•ผ ํ•œ๋‹ค !! 

์ž‘์€ ํ…Œ์ด๋ธ”์€ ํ’€ ์Šค์บ”์ด ๋น ๋ฅด๊ณ , ์ธ๋ฑ์Šค๋Š” ์˜คํžˆ๋ ค ์“ฐ๊ธฐ(INSERT/UPDATE) ๋ถ€ํ•˜๋ฅผ ๋Š˜๋ฆด ์ˆ˜๋„ ์žˆ๋‹ค. 

 

 

๐Ÿ’ก ์ƒˆ๋กœ ์•Œ๊ฒŒ๋œ ์  

1๏ธโƒฃ ํ’€์Šค์บ”์ด ํ•ญ์ƒ ๋‚˜์œ ๊ฑด ์•„๋‹ˆ๋‹ค.

ํ’€์Šค์บ”์ด๋ฉด ๋‚˜๋Š” ๋ฌด์กฐ๊ฑด ๊ฐœ์„ ์„ ํ•ด์•ผ ํ•œ๋‹ค๊ณ  ์ƒ๊ฐ์„ ํ–ˆ๋‹ค. ํ•˜์ง€๋งŒ ํ…Œ์ด๋ธ” ํฌ๊ธฐ๊ฐ€ ์ˆ˜๋ฐฑ ํ–‰ ์ˆ˜์ค€์ด๋ผ๋ฉด ์˜ตํ‹ฐ๋งˆ์ด์ €๊ฐ€ ํ’€์Šค์บ”์„ ๋” ํšจ์œจ์ ์œผ๋กœ ํŒ๋‹จํ•  ์ˆ˜๋„ ์žˆ๋‹ค๋Š” ๊ฑธ ์•Œ๊ฒŒ ๋๋‹ค. 

type=ALL ๋งŒ ๋ณด๊ณ  ์ธ๋ฑ์Šค๋ฅผ ๋ฌด์กฐ๊ฑด ์ถ”๊ฐ€ํ•˜๋Š” ๊ฒŒ ์•„๋‹ˆ๋ผ ๋ฐ์ดํ„ฐ ์–‘๊ณผ ์ ‘๊ทผ ๋นˆ๋„๋ฅผ ํ•จ๊ป˜ ๊ณ ๋ คํ•ด์•ผ ํ•จ์„ ์•Œ๊ฒŒ ๋๋‹ค. 

 

2๏ธโƒฃ ๋ณตํ•ฉ ์ธ๋ฑ์Šค๋Š” ๋‹จ์ผ ์ธ๋ฑ์Šค๋ณด๋‹ค "์ฟผ๋ฆฌ ๊ตฌ์กฐ"์— ๋งž์ถฐ ์„ค๊ณ„ํ•ด์•ผ ํ•œ๋‹ค. 

์œ„์˜ ์˜ˆ์‹œ์ฒ˜๋Ÿผ (PARENT_ID, CREATED_AT DESC) ์ฒ˜๋Ÿผ WHERE + ORDER BY ์กฐํ•ฉ์œผ๋กœ ๋งž์ถฐ๋‘๋ฉด filesort ์—†์ด ์ •๋ ฌ์ด ๋œ ๊ฒƒ์ฒ˜๋Ÿผ ์ฟผ๋ฆฌ ๊ตฌ์กฐ๋ฅผ ๋จผ์ € ๋ณด๊ณ  ์ธ๋ฑ์Šค๋ฅผ ์„ค๊ณ„ํ•ด์•ผ ํ•จ์„ ๋ฐฐ์› ๋‹ค. 

 

3๏ธโƒฃ ์ธ๋ฑ์Šค๋Š” ์„ฑ๋Šฅ๋ฟ ์•„๋‹ˆ๋ผ ์“ฐ๊ธฐ ๋ถ€ํ•˜๋„ ๊ณ ๋ คํ•ด์•ผ ํ•œ๋‹ค. 

๋กœ๊ทธ์ธ์ฒ˜๋Ÿผ ์š”์ฒญ ์ˆ˜๊ฐ€ ๋†’์€ ์กฐํšŒ๋Š” ์ธ๋ฑ์Šค๊ฐ€ ํ•„์ˆ˜๊ฒ ์ง€๋งŒ, ํ•˜๋ฃจ ๋ช‡ ๋ฒˆ ํ˜ธ์ถœ๋˜์ง€ ์•Š๋Š” ์ฟผ๋ฆฌ์— ์ธ๋ฑ์Šค๋ฅผ ๋Š˜๋ฆฌ๋Š” ๊ฑด ์˜คํžˆ๋ ค ๋˜ ๋‹ค๋ฅธ ๊ด€๋ฆฌ ํฌ์ธํŠธ๊ฐ€ ๋  ์ˆ˜๋„ ์žˆ์Œ์„ ์•Œ๊ฒŒ ๋๋‹ค. (์ธ๋ฑ์Šค๊ฐ€ ๋งŒ๋Šฅ์ด ์•„๋‹ˆ๋ผ๋Š” ์ ) 

 

 

 

๐Ÿ‘ฉ๐Ÿป‍๐Ÿ’ป ๊ฒฐ๋ก  (์‹ค์ œ ์ ์šฉ ์—ฌ๋ถ€ / ์šด์˜ ๊ณ ๋ ค) 

์˜ค๋Š˜ ๋ถ„์„ํ•œ ์ธ๋ฑ์Šค ํ›„๋ณด๋ฅผ ๋ฐ”๋กœ ์šด์˜ DB์— ์ ์šฉํ•˜๊ธฐ๋Š” ๋‹น์—ฐํžˆ ์–ด๋ ต๋‹ค. 

์ ๊ฒ€ ์‚ฌํ•ญ๋“ค์„ ์ฒดํฌ ํ›„ ์ ์šฉํ•˜๋Š” ๊ฒŒ ๋งž๊ฒ ๋‹ค๋Š” ํŒ๋‹จ์ด ๋“œ๋Š” ์ธ๋ฑ์Šค๋“ค์€ ์ถ”๊ฐ€๋ฅผ ํ•  ์˜ˆ์ •์ด๋‹ค. 

 

[์ ๊ฒ€ ์‚ฌํ•ญ] 

โ“ ํŠธ๋ž˜ํ”ฝ ์ƒ์œ„ ์ฟผ๋ฆฌ ์—ฌ๋ถ€ 

โ“์“ฐ๊ธฐ ๋ถ€ํ•˜ ์ฆ๊ฐ€ ๊ฐ€๋Šฅ์„ฑ ์—ฌ๋ถ€ 

โ“์ค‘๋ณต ์ธ๋ฑ์Šค ์—ฌ๋ถ€ 

โ“๋ฐ์ดํ„ฐ ๊ทœ๋ชจ (ํ…Œ์ด๋ธ” ๊ฑด์ˆ˜) 

 

 

 

๐Ÿค”๐Ÿ’ญ 

์˜ค๋Š˜์€ ์šด์˜์ค‘์ธ ์„œ๋น„์Šค์˜ ์ฃผ์š” SELECT ์ฟผ๋ฆฌ๋“ค์˜ ์‹คํ–‰ ๊ณ„ํš์„ EXPLAIN ์œผ๋กœ ๋ถ„์„ํ•˜๊ณ , ์ธ๋ฑ์Šค ํšจ์œจ์„ ํ™•์ธํ•ด๋ดค๋‹ค.

์ผ๋ถ€ ์ฟผ๋ฆฌ์—์„œ ์ธ๋ฑ์Šค ๋ฏธ์‚ฌ์šฉ ์ค‘ ๋“ฑ์˜ ๋น„ํšจ์œจ์ ์ธ ์ฟผ๋ฆฌ๋“ค์„ ํ™•์ธํ–ˆ๊ณ , ๊ฐ ์ฟผ๋ฆฌ์— ๋งž๊ฒŒ ๋ณตํ•ฉ ์ธ๋ฑ์Šค ์ƒ์„ฑ, WHERE ์กฐ๊ฑด ๊ตฌ์กฐ ๊ฐœ์„  ๋ฐฉํ–ฅ์„ ์ •๋ฆฌํ–ˆ๋‹ค. 

์ด๋ฒˆ ๋ถ„์„์„ ํ†ตํ•ด์„œ ๋‹จ์ˆœํžˆ ์ฟผ๋ฆฌ ์„ฑ๋Šฅ ๊ฐœ์„  ๋ฟ๋งŒ ์•„๋‹ˆ๋ผ, DB ์˜ตํ‹ฐ๋งˆ์ด์ €๊ฐ€ ์–ด๋–ป๊ฒŒ ํŒ๋‹จํ•˜๋Š”์ง€๋ฅผ ์•Œ ์ˆ˜ ์žˆ์—ˆ๋˜ ์‹œ๊ฐ„์ด์—ˆ๋‹ค ! 

๋˜ํ•œ ๊ฐœ๋ฐœ ์„œ๋ฒ„์—์„œ ๋™์ž‘ ์ž˜ ํ•œ๋‹ค๊ณ  ์ธ๋ฑ์Šค์˜ ํ•„์š” ์—ฌ๋ถ€๋ฅผ ๋ชจ๋ฅด๊ณ  ๋„˜์–ด๊ฐ„ ์ฟผ๋ฆฌ๋“ค๋„ ๋ฐœ๊ฒฌํ•  ์ˆ˜ ์žˆ์—ˆ๋‹ค.. 

์•ž์œผ๋กœ ์‹ ๊ทœ ์„œ๋น„์Šค ์ฟผ๋ฆฌ๋ฅผ ์ž‘์„ฑํ•  ๋•Œ๋Š” ์ข€ ๋” ํšจ์œจ์ ์œผ๋กœ ์ฟผ๋ฆฌ๋ฅผ ์ž‘์„ฑํ•  ์ˆ˜ ์žˆ๋„๋ก ์‹ ๊ฒฝ์จ์•ผ๊ฒ ๋‹ค๋Š” ๊ตํœธ์„ ์–ป์—ˆ๋‹ค. 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

728x90