Search

MySQL LIMIT

MySQL LIMIT ์‰ฝ๊ฒŒ ์ดํ•ดํ•˜๊ธฐ! | ํŽ˜์ด์ง• ์ฒ˜๋ฆฌ ํ•ต์‹ฌ ์ •๋ฆฌ

์ด ์˜์ƒ์€ MySQL์—์„œย LIMITย ํ‚ค์›Œ๋“œ๋ฅผ ์ด์šฉํ•ด ๋ฐ์ดํ„ฐ ์กฐํšŒ ์‹œ ํ–‰(row)์˜ ๊ฐœ์ˆ˜๋ฅผ ์ œํ•œํ•˜๋Š” ๋ฐฉ๋ฒ•๊ณผ, ์ด๋ฅผ ํ™œ์šฉํ•œย ํŽ˜์ด์ง• ์ฒ˜๋ฆฌ(ํŽ˜์ด์ง€๋„ค์ด์…˜)ย ๊ตฌํ˜„๋ฒ•์„ ์‰ฝ๊ณ  ์ž์„ธํ•˜๊ฒŒ ์„ค๋ช…ํ•ฉ๋‹ˆ๋‹ค. ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์—์„œ ์›ํ•˜๋Š” ๋งŒํผ๋งŒ ๋ฐ์ดํ„ฐ๋ฅผ ๋Š์–ด์„œ ๊ฐ€์ ธ์˜ค๋Š” ๋ฐฉ๋ฒ•์„ ๋ฐฐ์šฐ๊ณ , ํŽ˜์ด์ง€๋ณ„๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ๋‚˜๋ˆ„์–ด ๋ณด์—ฌ์ฃผ๋Š” ์‹ค์Šต๊ณผ ๊ณต์‹๋„ ํ•จ๊ป˜ ๋‹ค๋ฃน๋‹ˆ๋‹ค.

๋ชฉ์ฐจ

1.
LIMIT ํ‚ค์›Œ๋“œ ๊ธฐ๋ณธ ๊ฐœ๋…๊ณผ ๋ฌธ๋ฒ• [00:00:17]
2.
ํŽ˜์ด์ง• ์ฒ˜๋ฆฌ(ํŽ˜์ด์ง€๋„ค์ด์…˜) ์ดํ•ดํ•˜๊ธฐ [00:00:47]
3.
์‹ค์Šต: ์ƒ˜ํ”Œ ๋ฐ์ดํ„ฐ ์ƒ์„ฑ๊ณผ LIMIT ์‚ฌ์šฉ๋ฒ• [00:04:07]
4.
LIMIT ๋ฌธ๋ฒ• ์ˆœ์„œ์™€ ์œ„์น˜ ์ฃผ์˜์‚ฌํ•ญ [00:07:23]
5.
ํŽ˜์ด์ง• ๊ณ„์‚ฐ ๊ณต์‹๊ณผ ์˜ˆ์‹œ [00:13:23]
6.
ํ”„๋กœ๊ทธ๋žจ์—์„œ ํŽ˜์ด์ง• ์ฒ˜๋ฆฌ ๊ตฌํ˜„ ํŒ [00:19:11]
7.
MySQL LIMIT vs ๋‹ค๋ฅธ DBMS ํŽ˜์ด์ง• ์ฒ˜๋ฆฌ ๋น„๊ต [00:21:05]

LIMIT ํ‚ค์›Œ๋“œ ๊ธฐ๋ณธ ๊ฐœ๋…๊ณผ ๋ฌธ๋ฒ• [00:00:17]

โ€ข
LIMIT์€ MySQL์—์„œ ์กฐํšŒ ๊ฒฐ๊ณผ์˜ ํ–‰ ๊ฐœ์ˆ˜๋ฅผ ์ œํ•œํ•˜๋Š” ํ‚ค์›Œ๋“œ์ž…๋‹ˆ๋‹ค.
โ€ข
๊ธฐ๋ณธ ๋ฌธ๋ฒ•์€ย LIMIT [offset,] row_countย ๋˜๋Š”ย LIMIT row_count OFFSET offsetย ํ˜•ํƒœ์ž…๋‹ˆ๋‹ค.
โ€ข
offset์€ ๋ช‡ ๋ฒˆ์งธ ๋ฐ์ดํ„ฐ๋ถ€ํ„ฐ ์‹œ์ž‘ํ• ์ง€(0๋ถ€ํ„ฐ ์‹œ์ž‘ํ•˜๋Š” ์ธ๋ฑ์Šค),ย row_count๋Š” ๋ช‡ ๊ฐœ์˜ ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ€์ ธ์˜ฌ์ง€ ์ง€์ •ํ•ฉ๋‹ˆ๋‹ค.
โ€ข
์˜ˆ์‹œ:
โ—ฆ
LIMIT 0, 10ย โ†’ 0๋ฒˆ์งธ(์ฒซ ๋ฒˆ์งธ) ๋ฐ์ดํ„ฐ๋ถ€ํ„ฐ 10๊ฐœ ๊ฐ€์ ธ์˜ค๊ธฐ
โ—ฆ
LIMIT 10, 20ย โ†’ 10๋ฒˆ์งธ ๋ฐ์ดํ„ฐ๋ถ€ํ„ฐ 20๊ฐœ ๊ฐ€์ ธ์˜ค๊ธฐ (์‹ค์ œ๋กœ๋Š” 11๋ฒˆ์งธ๋ถ€ํ„ฐ 30๋ฒˆ์งธ๊นŒ์ง€)

ํŽ˜์ด์ง• ์ฒ˜๋ฆฌ(ํŽ˜์ด์ง€๋„ค์ด์…˜) ์ดํ•ดํ•˜๊ธฐ [00:00:47]

โ€ข
ํŽ˜์ด์ง• ์ฒ˜๋ฆฌ๋ž€, ํ•œ ๋ฒˆ์— ๋ชจ๋“  ๋ฐ์ดํ„ฐ๋ฅผ ๋ณด์—ฌ์ฃผ์ง€ ์•Š๊ณ  ํŽ˜์ด์ง€๋ณ„๋กœ ๋‚˜๋ˆ„์–ด ๋ณด์—ฌ์ฃผ๋Š” ๊ธฐ๋Šฅ์ž…๋‹ˆ๋‹ค.
โ€ข
์˜ˆ๋ฅผ ๋“ค์–ด ํ•œ ํŽ˜์ด์ง€์— 10๊ฐœ์”ฉ ๋ณด์—ฌ์ฃผ๋ฉด,
โ—ฆ
1ํŽ˜์ด์ง€๋Š”ย LIMIT 0, 10
โ—ฆ
2ํŽ˜์ด์ง€๋Š”ย LIMIT 10, 10
โ—ฆ
5ํŽ˜์ด์ง€๋Š”ย LIMIT 40, 10ย ์ด๋Ÿฐ ์‹์œผ๋กœ ๊ณ„์‚ฐํ•ด์„œ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.
โ€ข
ํŽ˜์ด์ง€ ๋ฒˆํ˜ธ์— ๋”ฐ๋ผย offset = (ํŽ˜์ด์ง€๋ฒˆํ˜ธ - 1) * ํŽ˜์ด์ง€๋‹น ๋ฐ์ดํ„ฐ ์ˆ˜๋กœ ๊ณ„์‚ฐํ•ฉ๋‹ˆ๋‹ค.

์‹ค์Šต: ์ƒ˜ํ”Œ ๋ฐ์ดํ„ฐ ์ƒ์„ฑ๊ณผ LIMIT ์‚ฌ์šฉ๋ฒ• [00:04:07]

โ€ข
์ฒœ ๊ฑด์˜ ์ƒ˜ํ”Œ ๋ฐ์ดํ„ฐ๋ฅผ ๋งŒ๋“ค์–ด์„œ ์‹ค์Šตํ•ฉ๋‹ˆ๋‹ค.
โ€ข
LIMIT์„ ์ฟผ๋ฆฌ ๋์— ๋ถ™์—ฌ์„œ ์›ํ•˜๋Š” ๋งŒํผ ๋ฐ์ดํ„ฐ๋ฅผ ์ž˜๋ผ์„œ ์กฐํšŒํ•ฉ๋‹ˆ๋‹ค.
โ€ข
์˜ˆ์‹œ:ย SELECT * FROM board LIMIT 10;ย โ†’ ์ฒ˜์Œ 10๊ฐœ ๋ฐ์ดํ„ฐ ์กฐํšŒ
โ€ข
LIMIT์€ ํ•ญ์ƒ ์ฟผ๋ฆฌ๋ฌธ์˜ ๊ฐ€์žฅ ๋งˆ์ง€๋ง‰์— ์œ„์น˜ํ•ด์•ผ ํ•˜๋ฉฐ,ย ORDER BYย ๋‹ค์Œ์— ์™€์•ผ ํ•ฉ๋‹ˆ๋‹ค.

LIMIT ๋ฌธ๋ฒ• ์ˆœ์„œ์™€ ์œ„์น˜ ์ฃผ์˜์‚ฌํ•ญ [00:07:23]

โ€ข
SQL ๋ฌธ๋ฒ• ์ˆœ์„œ:ย SELECTย โ†’ย FROMย โ†’ย WHEREย โ†’ย GROUP BYย โ†’ย ORDER BYย โ†’ย LIMIT
โ€ข
LIMIT์€ ํ•ญ์ƒ ๋งˆ์ง€๋ง‰์— ์จ์•ผ ํ•˜๋ฉฐ,ย ORDER BY๊ฐ€ย GROUP BY๋ณด๋‹ค ์•ž์„œ๊ฑฐ๋‚˜ย WHERE๋ณด๋‹ค ์•ž์„œ๋ฉด ์—๋Ÿฌ๊ฐ€ ๋‚ฉ๋‹ˆ๋‹ค.
โ€ข
๋”ฐ๋ผ์„œย LIMIT์€ ๊ฒฐ๊ณผ๋ฅผ ์ตœ์ข…์ ์œผ๋กœ ์ž๋ฅด๋Š” ์—ญํ• ์„ ํ•˜๋ฏ€๋กœ ๊ฐ€์žฅ ๋งˆ์ง€๋ง‰์— ์œ„์น˜ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

ํŽ˜์ด์ง• ๊ณ„์‚ฐ ๊ณต์‹๊ณผ ์˜ˆ์‹œ [00:13:23]

โ€ข
ํŽ˜์ด์ง• ์ฒ˜๋ฆฌ์— ํ•„์š”ํ•œ ํ•„์ˆ˜ ๋ฐ์ดํ„ฐ:
1.
ํ˜„์žฌ ํŽ˜์ด์ง€ ๋ฒˆํ˜ธ
2.
ํŽ˜์ด์ง€๋‹น ๋ณด์—ฌ์ค„ ๋ฐ์ดํ„ฐ ๊ฐœ์ˆ˜
3.
์ „์ฒด ๋ฐ์ดํ„ฐ ์ˆ˜
4.
๋…ธ์ถœํ•  ํŽ˜์ด์ง€ ๊ฐœ์ˆ˜(์˜ˆ: ํ•œ ๋ฒˆ์— ๋ช‡ ๊ฐœ์˜ ํŽ˜์ด์ง€ ๋ฒ„ํŠผ์„ ๋ณด์—ฌ์ค„์ง€)
โ€ข
์ฃผ์š” ๊ณต์‹:
โ—ฆ
๋งˆ์ง€๋ง‰ ํŽ˜์ด์ง€ ๋ฒˆํ˜ธ (last page)last = ((์ „์ฒด ๋ฐ์ดํ„ฐ ์ˆ˜ - 1) / ํŽ˜์ด์ง€๋‹น ๋ฐ์ดํ„ฐ ์ˆ˜) + 1์˜ˆ) 231๊ฑด ๋ฐ์ดํ„ฐ, 10๊ฐœ์”ฉ โ†’ย (231-1)/10 + 1 = 24ํŽ˜์ด์ง€
โ—ฆ
์‹œ์ž‘ ์ธ๋ฑ์Šค (offset)offset = (ํ˜„์žฌ ํŽ˜์ด์ง€ ๋ฒˆํ˜ธ - 1) * ํŽ˜์ด์ง€๋‹น ๋ฐ์ดํ„ฐ ์ˆ˜
โ—ฆ
์‹œ์ž‘ ํŽ˜์ด์ง€ ๋ฒˆํ˜ธ ๊ณ„์‚ฐ (ํŽ˜์ด์ง€ ๋ฒ„ํŠผ ๊ทธ๋ฃน ์‹œ์ž‘ ๋ฒˆํ˜ธ)startPage = ((ํ˜„์žฌ ํŽ˜์ด์ง€ ๋ฒˆํ˜ธ - 1) / ๋…ธ์ถœ ํŽ˜์ด์ง€ ๊ฐœ์ˆ˜) * ๋…ธ์ถœ ํŽ˜์ด์ง€ ๊ฐœ์ˆ˜ + 1
โ—ฆ
๋ ํŽ˜์ด์ง€ ๋ฒˆํ˜ธ ๊ณ„์‚ฐendPage = startPage + ๋…ธ์ถœ ํŽ˜์ด์ง€ ๊ฐœ์ˆ˜ - 1ย (์ „์ฒด ํŽ˜์ด์ง€ ์ˆ˜๋ฅผ ๋„˜์ง€ ์•Š๋„๋ก ์กฐ์ •)

ํ”„๋กœ๊ทธ๋žจ์—์„œ ํŽ˜์ด์ง• ์ฒ˜๋ฆฌ ๊ตฌํ˜„ ํŒ [00:19:11]

โ€ข
ํŽ˜์ด์ง• ์ฒ˜๋ฆฌ๋Š” ๋ณดํ†ต ํ”„๋กœ๊ทธ๋žจ์—์„œ ํ˜„์žฌ ํŽ˜์ด์ง€ ๋ฒˆํ˜ธ์™€ ํŽ˜์ด์ง€๋‹น ๋ฐ์ดํ„ฐ ์ˆ˜๋ฅผ ๋ฐ›์•„ ๊ณ„์‚ฐ ํ›„,๊ณ„์‚ฐ๋œย offset๊ณผย row_count๋ฅผ ์ฟผ๋ฆฌ์˜ย LIMIT์— ๋„˜๊ฒจ์ค๋‹ˆ๋‹ค.
โ€ข
์˜ˆ๋ฅผ ๋“ค์–ด, 3ํŽ˜์ด์ง€์— 10๊ฐœ์”ฉ ๋ณด์—ฌ์ฃผ๋ ค๋ฉดย LIMIT 20, 10ย (0๋ถ€ํ„ฐ ์‹œ์ž‘ํ•˜๋ฏ€๋กœ (3-1)*10=20)
โ€ข
ํŽ˜์ด์ง€ ๋ฒ„ํŠผ์„ ํ™”๋ฉด์— ์ถœ๋ ฅํ•  ๋•Œ๋Š” ์‹œ์ž‘ ํŽ˜์ด์ง€๋ถ€ํ„ฐ ๋ ํŽ˜์ด์ง€๊นŒ์ง€ ๋ฐ˜๋ณต๋ฌธ์„ ๋Œ๋ ค ๋ฒ„ํŠผ์„ ๋งŒ๋“ญ๋‹ˆ๋‹ค.
โ€ข
์ด์ „ ํŽ˜์ด์ง€, ๋‹ค์Œ ํŽ˜์ด์ง€ ๋ฒ„ํŠผ์€ ํ˜„์žฌ ํŽ˜์ด์ง€์—์„œ -1, +1 ํ•ด์ฃผ๋ฉด ๋ฉ๋‹ˆ๋‹ค.

MySQL LIMIT vs ๋‹ค๋ฅธ DBMS ํŽ˜์ด์ง• ์ฒ˜๋ฆฌ ๋น„๊ต [00:21:05]

โ€ข
MySQL์€ย LIMITย ํ‚ค์›Œ๋“œ ๋•๋ถ„์— ํŽ˜์ด์ง• ์ฒ˜๋ฆฌ๊ฐ€ ๋งค์šฐ ์‰ฝ๊ณ  ๊ฐ„๋‹จํ•ฉ๋‹ˆ๋‹ค.
โ€ข
๋ฐ˜๋ฉด, ์˜ค๋ผํด(Oracle) ๊ฐ™์€ DBMS๋Š” ํŽ˜์ด์ง• ์ฒ˜๋ฆฌ๋ฅผ ์œ„ํ•ด ์„œ๋ธŒ์ฟผ๋ฆฌ๋‚˜ ๋ณต์žกํ•œ ๊ณ„์ธตํ˜• ์ฟผ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•ด์•ผ ํ•ด์„œ ์–ด๋ ต์Šต๋‹ˆ๋‹ค.
โ€ข
๋”ฐ๋ผ์„œ MySQL์€ ์›น ๊ฐœ๋ฐœ ๋“ฑ์—์„œ ํŽ˜์ด์ง• ์ฒ˜๋ฆฌ์— ๋งค์šฐ ์ ํ•ฉํ•œ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์ž…๋‹ˆ๋‹ค.

๋งˆ๋ฌด๋ฆฌ ์š”์•ฝ

MySQL์˜ย LIMITย ํ‚ค์›Œ๋“œ๋Š” ๋ฐ์ดํ„ฐ ์กฐํšŒ ์‹œ ์›ํ•˜๋Š” ํ–‰์˜ ๊ฐœ์ˆ˜๋ฅผ ์ œํ•œํ•˜๋Š” ์•„์ฃผ ์œ ์šฉํ•œ ๊ธฐ๋Šฅ์ž…๋‹ˆ๋‹ค. ํŠนํžˆ ํŽ˜์ด์ง• ์ฒ˜๋ฆฌ(ํŽ˜์ด์ง€๋„ค์ด์…˜)๋ฅผ ๊ตฌํ˜„ํ•  ๋•Œ ํ•„์ˆ˜์ ์œผ๋กœ ์‚ฌ์šฉ๋˜๋ฉฐ,ย LIMIT offset, row_countย ๋ฌธ๋ฒ•์„ ํ†ตํ•ด ์‰ฝ๊ฒŒ ํŠน์ • ์œ„์น˜๋ถ€ํ„ฐ ์›ํ•˜๋Š” ๊ฐœ์ˆ˜๋งŒํผ ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ€์ ธ์˜ฌ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ํ”„๋กœ๊ทธ๋žจ์—์„œ ํ˜„์žฌ ํŽ˜์ด์ง€ ๋ฒˆํ˜ธ์™€ ํŽ˜์ด์ง€๋‹น ๋ฐ์ดํ„ฐ ์ˆ˜๋ฅผ ๋ฐ›์•„ ๊ณ„์‚ฐํ•œย offsetย ๊ฐ’์„ ์ฟผ๋ฆฌ์— ๋„˜๊ฒจ์ฃผ๋ฉด, ๋ณต์žกํ•œ ํŽ˜์ด์ง• ์ฒ˜๋ฆฌ๋„ ๊ฐ„๋‹จํ•˜๊ฒŒ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ๋‹ต๋‹ˆ๋‹ค. MySQL ๋•๋ถ„์— ํŽ˜์ด์ง• ์ฒ˜๋ฆฌ๋„ ์‰ฝ๊ณ  ๋น ๋ฅด๊ฒŒ ํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ์ , ๊ผญ ๊ธฐ์–ตํ•˜์„ธ์š”!
๊ถ๊ธˆํ•œ ์  ์žˆ์œผ๋ฉด ๋Œ“๊ธ€๋กœ ๋‚จ๊ฒจ์ฃผ์„ธ์š”! ์ฆ๊ฑฐ์šด ์ฝ”๋”ฉ ๋˜์„ธ์š”~