Home > DB > ๐Ÿ’พ[Database] ์˜คํ”„์…‹(Offset)์ด๋ž€ ๋ฌด์—‡์ผ๊นŒ์š”?

๐Ÿ’พ[Database] ์˜คํ”„์…‹(Offset)์ด๋ž€ ๋ฌด์—‡์ผ๊นŒ์š”?
Database Database Optimization

๐Ÿ’พ[Database] ์˜คํ”„์…‹(Offset)์ด๋ž€ ๋ฌด์—‡์ผ๊นŒ์š”?

๐Ÿ“Œ Intro.

  • โ†˜๏ธŽ ์˜คํ”„์…‹(Offset)์€ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์ฟผ๋ง์„œ ๊ฒฐ๊ณผ ์ง‘ํ•ฉ ์ค‘ ํŠน์ • ์œ„์น˜์—์„œ๋ถ€ํ„ฐ ๋ฐ์ดํ„ฐ๋ฅผ ๋ฐ˜ํ™˜ํ•˜๋„๋ก ํ•˜๋Š” ๊ธฐ์ค€์ ์„ ์˜๋ฏธํ•จ.
    • โ†˜๏ธŽ ์ฃผ๋กœ ํŽ˜์ด์ง•(Paging)์„ ๊ตฌํ˜„ํ•  ๋•Œ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค.

โœ…1๏ธโƒฃ ์˜คํ”„์…‹(Offset)์˜ ํ•ต์‹ฌ ๊ฐœ๋….

1๏ธโƒฃ ๋ฐ์ดํ„ฐ ๊ฑด๋„ˆ๋›ฐ๊ธฐ.

  • โ†˜๏ธŽ OFFSET์€ ๊ฒฐ๊ณผ ์ง‘ํ•ฉ์—์„œ ์ฒ˜์Œ ๋ช‡ ๊ฐœ์˜ ํ–‰(Row)์„ ๊ฑด๋„ˆ๋›ฐ๊ณ  ๊ทธ ๋‹ค์Œ๋ถ€ํ„ฐ ๋ฐ์ดํ„ฐ๋ฅผ ๋ฐ˜ํ™˜ํ•จ.

2๏ธโƒฃ ํŽ˜์ด์ง•๊ณผ ํ•จ๊ป˜ ์‚ฌ์šฉ.

  • โ†˜๏ธŽ ์ฃผ๋กœ LIMIT์™€ ํ•จ๊ป˜ ์‚ฌ์šฉ๋จ.
  • โ†˜๏ธŽ LIMIT์€ ๋ฐ˜ํ™˜ํ•  ๋ฐ์ดํ„ฐ์˜ ๊ฐœ์ˆ˜๋ฅผ, OFFSET์€ ๊ฑด๋„ˆ๋›ธ ํ–‰(Row)์˜ ๊ฐœ์ˆ˜๋ฅผ ์ง€์ •ํ•จ.

3๏ธโƒฃ 0-based Indexing.

  • โ†˜๏ธŽ ์˜คํ”„์…‹์€ ์ผ๋ฐ˜์ ์œผ๋กœ 0๋ถ€ํ„ฐ ์‹œ์ž‘ํ•จ.
  • โ†˜๏ธŽ OFFSET 0์€ ์ฒ˜์Œ๋ถ€ํ„ฐ ๋ฐ˜ํ™˜ํ•˜๋ผ๋Š” ์˜๋ฏธ์ž„.

โœ…2๏ธโƒฃ SQL ์˜ˆ์‹œ.

1๏ธโƒฃ ๊ธฐ๋ณธ ์˜ˆ์ œ

SELECT * FROM articles LIMIT 10 OFFSET 20;
  • โ†˜๏ธŽ ์„ค๋ช… :
    • โ†˜๏ธŽ LIMIT 10 : ์ตœ๋Œ€ 10๊ฐœ์˜ ํ–‰(Row)์„ ๊ฐ€์ ธ์˜ด.
    • โ†˜๏ธŽ OFFSET 20 : ์ฒซ 20๊ฐœ์˜ ํ–‰(Row)์„ ๊ฑด๋„ˆ๋›ฐ๊ณ , 21๋ฒˆ์งธ ํ–‰๋ถ€ํ„ฐ ๋ฐ˜ํ™˜ํ•จ.

2๏ธโƒฃ ํŽ˜์ด์ง• ๊ตฌํ˜„

  • โ†˜๏ธŽ ํŽ˜์ด์ง€๋„ค์ด์…˜์„ ๊ตฌํ˜„ํ•  ๋•Œ OFFSET์€ ํŠน์ • ํŽ˜์ด์ง€์˜ ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ€์ ธ์˜ค๋Š” ๋ฐ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค.
    • โ†˜๏ธŽ ์˜ˆ๋ฅผ ๋“ค์–ด:
      • โ†˜๏ธŽ ํŽ˜์ด์ง€๋‹น ๋ฐ์ดํ„ฐ : 10๊ฐœ
      • โ†˜๏ธŽ 1 ํŽ˜์ด์ง€ : OFFSET 0 LIMIT 10
      • โ†˜๏ธŽ 2 ํŽ˜์ด์ง€ : OFFSET 10 LIMIT 10
      • โ†˜๏ธŽ 3 ํŽ˜์ด์ง€ : OFFSET 20 LIMIT 10

โœ…3๏ธโƒฃ ์˜คํ”„์…‹์˜ ๋ฌธ์ œ์ .

1๏ธโƒฃ ์„ฑ๋Šฅ ์ €ํ•˜.

  • โ†˜๏ธŽ OFFSET์€ ๊ฑด๋„ˆ๋›ฐ์–ด์•ผ ํ•  ๋ชจ๋“  ๋ฐ์ดํ„ฐ๋ฅผ ์ฝ๊ณ  ๋‚˜์„œ์•ผ ์ง€์ •๋œ ํ–‰(Row)์„ ๋ฐ˜ํ™˜ํ•จ.
  • โ†˜๏ธŽ ํŽ˜์ด์ง€ ๋ฒˆํ˜ธ๊ฐ€ ์ปค์งˆ์ˆ˜๋ก ๊ฑด๋„ˆ๋›ธ ๋ฐ์ดํ„ฐ๊ฐ€ ๋งŽ์•„์ ธ ์„ฑ๋Šฅ์ด ์ €ํ•˜๋จ

2๏ธโƒฃ ๋ถˆํ•„์š”ํ•œ ๋ฐ์ดํ„ฐ ์ฝ๊ธฐ.

  • โ†˜๏ธŽ ๋ชจ๋“  ๋ฐ์ดํ„ฐ๋ฅผ ์ฝ๊ณ  ๋‚˜์„œ ํ•„์š” ์—†๋Š” ๋ถ€๋ถ„์„ ์ œ์™ธํ•˜๋ฏ€๋กœ ํšจ์œจ์ ์ด์ง€ ์•Š์Œ.

3๏ธโƒฃ๐Ÿ’ก ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•.

  • โ†˜๏ธŽ ์ปค์„œ(Cursor) ๊ธฐ๋ฐ˜ ํŽ˜์ด์ง• : ํŠน์ • ํ–‰(Row)์˜ ํ‚ค(Key)๋ฅผ ๊ธฐ์ค€์œผ๋กœ ๋‹ค์Œ ํŽ˜์ด์ง€๋ฅผ ๋ฐ˜ํ™˜ํ•จ.
  • โ†˜๏ธŽ ์ •๋ ฌ ํ•„๋“œ ํ™œ์šฉ : ์ •๋ ฌ๋œ ํŠน์ • ID๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ํŽ˜์ด์ง•ํ•จ.

๐Ÿš€ ์ •๋ฆฌ.

  • ๐Ÿ“Œ ์˜คํ”„์…‹(Offset)
    • โ†˜๏ธŽ ๊ฒฐ๊ณผ ์ง‘ํ•ฉ์—์„œ ๋ช‡ ๊ฐœ์˜ ํ–‰(Row)์„ ๊ฑด๋„ˆ๋›ฐ๊ณ  ๋ฐ˜ํ™˜ํ• ์ง€๋ฅผ ์ง€์ •ํ•˜๋Š” ํ‚ค์›Œ๋“œ์ž„.
  • ๐Ÿ“Œ ์ฃผ๋กœ LIMIT๊ณผ ํ•จ๊ป˜ ์‚ฌ์šฉ๋˜์–ด ํŽ˜์ด์ง•์„ ๊ตฌํ˜„ํ•จ.
  • ๐Ÿ“Œ ๋ฌธ์ œ์ 
    • โ†˜๏ธŽ ๋Œ€๋Ÿ‰์˜ ๋ฐ์ดํ„ฐ๋ฅผ ๋‹ค๋ฃฐ ๋•Œ ์„ฑ๋Šฅ ์ €ํ•˜๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ์Œ.
  • ๐Ÿ“Œ ํ•ด๊ฒฐ์ฑ…
    • โ†˜๏ธŽ ์ปค์„œ(Cursor) ๊ธฐ๋ฐ˜ ํŽ˜์ด์ง• ๋˜๋Š” ์ •๋ ฌ ํ•„๋“œ๋ฅผ ํ™œ์šฉํ•œ ํŽ˜์ด์ง• ์ „๋žต์„ ๊ณ ๋ ค.
  • ์˜คํ”„์…‹์€ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ํŽ˜์ด์ง•์˜ ํ•ต์‹ฌ ๊ฐœ๋…์ด์ง€๋งŒ, ์ƒํ™ฉ์— ๋”ฐ๋ผ ๋‹ค๋ฅธ ํŽ˜์ด์ง• ์ „๋žต์„ ์‚ฌ์šฉํ•  ํ•„์š”๊ฐ€ ์žˆ์Œ.