๋ฐ์ดํฐ๋ฒ ์ด์ค ์ฑ๋ฅ ์ต์ ํ์ ๋ํด ๊ฑฑ์ ํ ํ์๊ฐ ์์๋ ์๋๋ ์ง๋ฌ์ต๋๋ค. ์๊ฐ์ ๊ฐ๋งํ ์์ง ์์ต๋๋ค. ๋ชจ๋ ์๋ก์ด ๊ธฐ์ ๊ธฐ์ ๊ฐ๋ ์ฐจ์ธ๋ Facebook์ ๋ง๋ค๊ณ ์ถ์ดํ๋ฉฐ, ์์ ๋ฃ์ ์ ์๋ ๋ชจ๋ ๋ฐ์ดํฐ๋ฅผ ์์งํ๋ ค๊ณ ๋ ธ๋ ฅํฉ๋๋ค. ๊ธฐ์ ์ด ๋์ ๋ฒ๋ ๋ฐ ๋์์ด ๋๋ ๋ชจ๋ธ์ ๋ ์ ํ๋ จํ๋ ค๋ฉด ์ด ๋ฐ์ดํฐ๊ฐ ํ์ํฉ๋๋ค. ์ด๋ฌํ ์ํฉ์์ ํ๋ก๊ทธ๋๋จธ๋ ์์ฒญ๋ ์์ ์ ๋ณด๋ฅผ ๋น ๋ฅด๊ณ ์์ ์ ์ผ๋ก ์ฒ๋ฆฌํ ์ ์๋ API๋ฅผ ๋ง๋ค์ด์ผ ํฉ๋๋ค.
์ค๋ซ๋์ ์ ํ๋ฆฌ์ผ์ด์
์ด๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค ๋ฐฑ์๋๋ฅผ ์ค๊ณํด ์๋ค๋ฉด ํ์ด์ง๋ฅผ ๋งค๊ธด ์ฟผ๋ฆฌ๋ฅผ ์คํํ๋ ์ฝ๋๋ฅผ ์์ฑํด ๋ณด์์ ๊ฒ์
๋๋ค. ์๋ฅผ ๋ค์ด ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
SELECT * FROM table_name LIMIT 10 OFFSET 40
๊ทธ ๋ฐฉ๋ฒ์ ๋ฌด์์ ๋๊น?
ํ์ง๋ง ์ด๋ ๊ฒ ํ์ด์ง ๋งค๊น์ ์ํํ๋ค๋ฉด ๊ฐ์ฅ ํจ์จ์ ์ธ ๋ฐฉ์์ผ๋ก ์ํํ์ง ์์๋ค๋ ์ ์ ์ ๊ฐ์ค๋ฝ๊ฒ ์๊ฐํฉ๋๋ค.
๋์๊ฒ ๋ฐ๋ํ๊ณ ์ถ๋์?
ํ ๋ฒ๋ ์ฌ์ฉํด๋ณธ ์ ์ด ์๋ ๋ฐฑ์๋ ๊ฐ๋ฐ์๋ฅผ ํ ๋ช
์ด์ ์ธ๊ธํ์ธ์. OFFSET
ะธ LIMIT
ํ์ด์ง๊ฐ ๋งค๊ฒจ์ง ์ฟผ๋ฆฌ๋ฅผ ์ํํฉ๋๋ค. MVP(Minimum Viable Product) ๋ฐ ์๋์ ๋ฐ์ดํฐ๊ฐ ์ฌ์ฉ๋๋ ํ๋ก์ ํธ์์ ์ด ์ ๊ทผ ๋ฐฉ์์ ์๋นํ ์ ์ฉ ๊ฐ๋ฅํฉ๋๋ค. ๋งํ์๋ฉด "๊ทธ๋ฅ ์๋ํฉ๋๋ค".
ํ์ง๋ง ์ฒ์๋ถํฐ ์์ ์ ์ด๊ณ ํจ์จ์ ์ธ ์์คํ ์ ๋ง๋ค์ด์ผ ํ๋ค๋ฉด ๊ทธ๋ฌํ ์์คํ ์์ ์ฌ์ฉ๋๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ฅผ ์ฟผ๋ฆฌํ๋ ํจ์จ์ฑ์ ๋ํด ๋ฏธ๋ฆฌ ์ฃผ์ํด์ผ ํฉ๋๋ค.
์ค๋ ์ฐ๋ฆฌ๋ ์ผ๋ฐ์ ์ผ๋ก ์ฌ์ฉ๋๋(๋๋ฌด ๋์) ํ์ด์ง ๋งค๊น ์ฟผ๋ฆฌ ์์ง ๊ตฌํ์ ๋ฌธ์ ์ ๊ณผ ์ด๋ฌํ ์ฟผ๋ฆฌ๋ฅผ ์คํํ ๋ ๋์ ์ฑ๋ฅ์ ๋ฌ์ฑํ๋ ๋ฐฉ๋ฒ์ ๋ํด ์ด์ผ๊ธฐํ๊ฒ ์ต๋๋ค.
OFFSET๊ณผ LIMIT์ ์ด๋ค ๋ฌธ์ ๊ฐ ์๋์?
์ด๋ฏธ ๋งํ๋ฏ์ด, OFFSET
ะธ LIMIT
๋ง์ ์์ ๋ฐ์ดํฐ๋ฅผ ๋ค๋ฃฐ ํ์๊ฐ ์๋ ํ๋ก์ ํธ์์ ์ข์ ์ฑ๋ฅ์ ๋ฐํํฉ๋๋ค.
๋ฐ์ดํฐ๋ฒ ์ด์ค๊ฐ ๋ ์ด์ ์๋ฒ ๋ฉ๋ชจ๋ฆฌ์ ๋ง์ง ์๋ ํฌ๊ธฐ๋ก ์ปค์ง๋ฉด ๋ฌธ์ ๊ฐ ๋ฐ์ํฉ๋๋ค. ๊ทธ๋ฌ๋ ์ด ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ก ์์ ํ ๋๋ ํ์ด์ง๋ฅผ ๋งค๊ธด ์ฟผ๋ฆฌ๋ฅผ ์ฌ์ฉํด์ผ ํฉ๋๋ค.
์ด ๋ฌธ์ ๊ฐ ๋ํ๋๋ ค๋ฉด DBMS๊ฐ ํ์ด์ง๊ฐ ๋งค๊ฒจ์ง ๊ฐ ์ฟผ๋ฆฌ์ ๋ํด ๋นํจ์จ์ ์ธ ์ ์ฒด ํ ์ด๋ธ ์ค์บ ์์ ์ ์ํํ๋ ์ํฉ์ด ์์ด์ผ ํฉ๋๋ค(์ฝ์ ๋ฐ ์ญ์ ์์ ์ด ๋ฐ์ํ ์ ์์ผ๋ฉฐ ์ค๋๋ ๋ฐ์ดํฐ๋ ํ์ํ์ง ์์ต๋๋ค!).
"์ ์ฒด ํ ์ด๋ธ ์ค์บ"(๋๋ "์์ฐจ ํ ์ด๋ธ ์ค์บ", ์์ฐจ ์ค์บ)์ด๋ ๋ฌด์์ ๋๊น? ์ด๋ DBMS๊ฐ ํ ์ด๋ธ์ ๊ฐ ํ, ์ฆ ๊ทธ ์์ ํฌํจ๋ ๋ฐ์ดํฐ๋ฅผ ์์ฐจ์ ์ผ๋ก ์ฝ์ด์ ์ฃผ์ด์ง ์กฐ๊ฑด์ ๋ง๋์ง ํ์ธํ๋ ์์ ์ด๋ค. ์ด ์ ํ์ ํ ์ด๋ธ ์ค์บ์ ๊ฐ์ฅ ๋๋ฆฐ ๊ฒ์ผ๋ก ์๋ ค์ ธ ์์ต๋๋ค. ์ฌ์ค ์ด ํ๋ก๊ทธ๋จ์ด ์คํ๋ ๋ ์๋ฒ์ ๋์คํฌ ํ์ ์์คํ ๊ณผ ๊ด๋ จ๋ ๋ง์ ์ ๋ ฅ/์ถ๋ ฅ ์์ ์ด ์ํ๋ฉ๋๋ค. ๋์คํฌ์ ์ ์ฅ๋ ๋ฐ์ดํฐ ์์ ๊ณผ ๊ด๋ จ๋ ์ง์ฐ๊ณผ ๋์คํฌ์์ ๋ฉ๋ชจ๋ฆฌ๋ก ๋ฐ์ดํฐ๋ฅผ ์ ์กํ๋ ์์ ์ด ๋ฆฌ์์ค๋ฅผ ๋ง์ด ์ฌ์ฉํ๋ค๋ ์ฌ์ค๋ก ์ธํด ์ํฉ์ด ๋์ฑ ์ ํ๋ฉ๋๋ค.
์๋ฅผ ๋ค์ด, 100000000๋ช
์ ์ฌ์ฉ์ ๋ ์ฝ๋๊ฐ ์๊ณ ๋ค์ ๊ตฌ๋ฌธ์ ์ฌ์ฉํ์ฌ ์ฟผ๋ฆฌ๋ฅผ ์คํํฉ๋๋ค. OFFSET 50000000
. ์ฆ, DBMS๋ ์ด๋ฌํ ๋ชจ๋ ๋ ์ฝ๋๋ฅผ ๋ก๋ํ๊ณ (ํ์ํ์ง๋ ์์ต๋๋ค!) ๋ฉ๋ชจ๋ฆฌ์ ์ ์ฅํ ํ ์๋ฅผ ๋ค์ด 20๊ฐ์ ๊ฒฐ๊ณผ๋ฅผ ๊ฐ์ ธ์์ผ ํฉ๋๋ค. LIMIT
.
"50000์์ 50020์์ 100000๊น์ง์ ํ์ ์ ํํ์ธ์"์ ๊ฐ์ด ๋ณด์ผ ์ ์๋ค๊ณ ๊ฐ์ ํด ๋ณด๊ฒ ์ต๋๋ค. ์ฆ, ์์คํ ์ ์ฟผ๋ฆฌ๋ฅผ ์๋ฃํ๊ธฐ ์ํด ๋จผ์ 50000๊ฐ์ ํ์ ๋ก๋ํด์ผ ํฉ๋๋ค. ๊ทธ๋ ๊ฐ ์ผ๋ง๋ ๋ถํ์ํ ์ผ์ ํด์ผ ํ๋์ง ์์๋์?
๋ด ๋ง์ ๋ฏฟ์ ์ ์๋ค๋ฉด ๋ด๊ฐ ๊ธฐ๋ฅ์ ์ฌ์ฉํ์ฌ ๋ง๋ ์์ ๋ฅผ ์ดํด๋ณด์ธ์.
db-fiddle.com์ ์
์ ๊ธฐ ์ผ์ชฝ ๋คํ์ Schema SQL
, ๋ฐ์ดํฐ๋ฒ ์ด์ค์ 100000๊ฐ์ ํ์ ์ฝ์
ํ๋ ์ฝ๋๊ฐ ์๊ณ ์ค๋ฅธ์ชฝ์๋ ํ๋์ Query SQL
, ๋ ๊ฐ์ ์ฟผ๋ฆฌ๊ฐ ํ์๋ฉ๋๋ค. ์ฒซ ๋ฒ์งธ ๋๋ฆฐ ๊ฒ์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
SELECT *
FROM `docs`
LIMIT 10 OFFSET 85000;
๊ทธ๋ฆฌ๊ณ ๋์ผํ ๋ฌธ์ ์ ๋ํ ํจ๊ณผ์ ์ธ ํด๊ฒฐ์ฑ ์ธ ๋ ๋ฒ์งธ ๋ฐฉ๋ฒ์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
SELECT *
FROM `docs`
WHERE id > 85000
LIMIT 10;
์ด๋ฌํ ์์ฒญ์ ์ดํํ๋ ค๋ฉด ๋ฒํผ์ ํด๋ฆญํ์ธ์. Run
ํ์ด์ง ์๋จ์ ์์ต๋๋ค. ์ด๋ฅผ ์ํํ ํ ์ฟผ๋ฆฌ ์คํ ์๊ฐ์ ๋ํ ์ ๋ณด๋ฅผ ๋น๊ตํฉ๋๋ค. ๋นํจ์จ์ ์ธ ์ฟผ๋ฆฌ๋ฅผ ์คํํ๋ ๊ฒ์ ๋ ๋ฒ์งธ ์ฟผ๋ฆฌ๋ฅผ ์คํํ๋ ๊ฒ๋ณด๋ค ์ต์ 30๋ฐฐ ๋ ์ค๋ ๊ฑธ๋ฆฌ๋ ๊ฒ์ผ๋ก ๋ํ๋ฌ์ต๋๋ค(์ด ์๊ฐ์ ์คํ๋ง๋ค ๋ค๋ฆ
๋๋ค. ์๋ฅผ ๋ค์ด ์์คํ
์ ์ฒซ ๋ฒ์งธ ์ฟผ๋ฆฌ๋ฅผ ์๋ฃํ๋ ๋ฐ 37ms๊ฐ ๊ฑธ๋ ธ๋ค๊ณ ๋ณด๊ณ ํ ์ ์์ง๋ง ์ด - 1ms).
๊ทธ๋ฆฌ๊ณ ๋ ๋ง์ ๋ฐ์ดํฐ๊ฐ ์์ผ๋ฉด ๋ชจ๋ ๊ฒ์ด ๋ ๋๋น ๋ณด์ผ ๊ฒ์
๋๋ค. (์ด๋ฅผ ํ์ธํ๋ ค๋ฉด ๋ด
๋ฐฉ๊ธ ๋ ผ์ํ ๋ด์ฉ์ ํตํด ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ฟผ๋ฆฌ๊ฐ ์ค์ ๋ก ์ฒ๋ฆฌ๋๋ ๋ฐฉ์์ ๋ํ ํต์ฐฐ๋ ฅ์ ์ป์ ์ ์์ต๋๋ค.
๊ฐ์ด ๋์์๋ก ์ฃผ์ํ์ธ์. OFFSET
โ ์์ฒญ์ ์๋ฃํ๋ ๋ฐ ์๊ฐ์ด ๋ ์ค๋ ๊ฑธ๋ฆฝ๋๋ค.
OFFSET๊ณผ LIMIT์ ์กฐํฉ ๋์ ๋ฌด์์ ์ฌ์ฉํด์ผ ํฉ๋๊น?
์กฐํฉ ๋์ OFFSET
ะธ LIMIT
๋ค์ ๊ตฌ์ฑํ์ ๋ฐ๋ผ ๊ตฌ์ถ๋ ๊ตฌ์กฐ๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ด ์ข์ต๋๋ค.
SELECT * FROM table_name WHERE id > 10 LIMIT 20
์ด๋ ์ปค์ ๊ธฐ๋ฐ ํ์ด์ง ๋งค๊น์ ์ฌ์ฉํ ์ฟผ๋ฆฌ ์คํ์ ๋๋ค.
ํ์ฌ ํญ๋ชฉ์ ๋ก์ปฌ์ ์ ์ฅํ๋ ๋์ OFFSET
ะธ LIMIT
๊ฐ ์์ฒญ๊ณผ ํจ๊ป ์ด๋ฅผ ์ ์กํ๋ ค๋ฉด ๋ง์ง๋ง์ผ๋ก ์์ ํ ๊ธฐ๋ณธ ํค๋ฅผ ์ ์ฅํด์ผ ํฉ๋๋ค(์ผ๋ฐ์ ์ผ๋ก ์ด๋ ID
) ๊ทธ๋ฆฌ๊ณ LIMIT
, ๊ฒฐ๊ณผ์ ์ผ๋ก ์์ ์ ์ฌํ ์ง์๋ฅผ ์ป๊ฒ ๋๋ค.
์? ์์ ์ ์ฝ์ ๋ง์ง๋ง ํ์ ์๋ณ์๋ฅผ ๋ช ์์ ์ผ๋ก ์ง์ ํจ์ผ๋ก์จ ํ์ํ ๋ฐ์ดํฐ ๊ฒ์์ ์์ํด์ผ ํ๋ ์์น๋ฅผ DBMS์ ์๋ ค์ค๋ค๋ ๊ฒ์ ๋๋ค. ๋ํ ํค๋ฅผ ์ฌ์ฉํ๋ฉด ๊ฒ์์ด ํจ์จ์ ์ผ๋ก ์ํ๋๋ฏ๋ก ์ง์ ๋ ๋ฒ์๋ฅผ ๋ฒ์ด๋ ์ค๋ก ์ธํด ์์คํ ์ด ์ฐ๋งํด์ง ํ์๊ฐ ์์ต๋๋ค.
๋ค์ํ ์ฟผ๋ฆฌ์ ๋ํ ์ฑ๋ฅ ๋น๊ต๋ฅผ ๋ค์๊ณผ ๊ฐ์ด ์ดํด๋ณด๊ฒ ์ต๋๋ค. ๋ค์์ ๋นํจ์จ์ ์ธ ์ฟผ๋ฆฌ์ ๋๋ค.
๋๋ฆฐ ์์ฒญ
๋ค์์ ์ด ์์ฒญ์ ์ต์ ํ๋ ๋ฒ์ ์ ๋๋ค.
๋น ๋ฅธ ์์ฒญ
๋ ์ฟผ๋ฆฌ ๋ชจ๋ ์ ํํ ๋์ผํ ์์ ๋ฐ์ดํฐ๋ฅผ ๋ฐํํฉ๋๋ค. ๊ทธ๋ฐ๋ฐ ์ฒซ ๋ฒ์งธ๋ ์๋ฃํ๋ ๋ฐ 12,80์ด๊ฐ ๊ฑธ๋ฆฌ๊ณ , ๋ ๋ฒ์งธ๋ 0,01์ด๊ฐ ๊ฑธ๋ฆฝ๋๋ค. ์ฐจ์ด์ ์ ๋๋ผ์๋์?
๊ฐ๋ฅํ ๋ฌธ์
์ ์๋ ์ฟผ๋ฆฌ ๋ฐฉ๋ฒ์ด ํจ๊ณผ์ ์ผ๋ก ์๋ํ๋ ค๋ฉด ํ ์ด๋ธ์ ์ ์ ์๋ณ์์ ๊ฐ์ ๊ณ ์ ํ ์์ฐจ์ ์ธ๋ฑ์ค๊ฐ ํฌํจ๋ ์ด์ด ์์ด์ผ ํฉ๋๋ค. ์ผ๋ถ ํน์ ๊ฒฝ์ฐ์๋ ์ด๋ฌํ ์ฟผ๋ฆฌ๋ฅผ ์ฌ์ฉํ์ฌ ๋ฐ์ดํฐ๋ฒ ์ด์ค ์์ ์๋๋ฅผ ๋์ด๋ ์ฑ๊ณต ์ฌ๋ถ๊ฐ ๊ฒฐ์ ๋ ์ ์์ต๋๋ค.
๋น์ฐํ ์ฟผ๋ฆฌ๋ฅผ ๊ตฌ์ฑํ ๋ ํ
์ด๋ธ์ ํน์ ์ํคํ
์ฒ๋ฅผ ๊ณ ๋ คํ๊ณ ๊ธฐ์กด ํ
์ด๋ธ์ ๊ฐ์ฅ ์ ์๋ํ๋ ๋ฉ์ปค๋์ฆ์ ์ ํํด์ผ ํฉ๋๋ค. ์๋ฅผ ๋ค์ด, ๋๋์ ๊ด๋ จ ๋ฐ์ดํฐ๊ฐ ํฌํจ๋ ์ฟผ๋ฆฌ ์์
์ ์ํํด์ผ ํ๋ ๊ฒฝ์ฐ ํฅ๋ฏธ๋ก์ธ ์ ์์ต๋๋ค.
์๋ฅผ ๋ค์ด ๋ค๋๋ค ๊ด๊ณ์ ํ
์ด๋ธ์ด ์๋ ๊ฒฝ์ฐ์ ๊ฐ์ด ๊ธฐ๋ณธ ํค๊ฐ ๋๋ฝ๋๋ ๋ฌธ์ ์ ์ง๋ฉดํ ๊ฒฝ์ฐ ๋ค์์ ์ฌ์ฉํ๋ ์ ํต์ ์ธ ์ ๊ทผ ๋ฐฉ์์ ์ฌ์ฉํฉ๋๋ค. OFFSET
ะธ LIMIT
, ์ฐ๋ฆฌ์๊ฒ ์ ํฉํ๋ค๋ ๊ฒ์ด ๋ณด์ฅ๋ฉ๋๋ค. ๊ทธ๋ฌ๋ ์ด๋ฅผ ์ฌ์ฉํ๋ฉด ์ฟผ๋ฆฌ ์๋๊ฐ ๋๋ ค์ง ์ ์์ต๋๋ค. ์ด๋ฌํ ๊ฒฝ์ฐ์๋ ํ์ด์ง๊ฐ ๋งค๊ฒจ์ง ์ฟผ๋ฆฌ๋ฅผ ์ฒ๋ฆฌํ๋ ๋ฐ๋ง ํ์ํ๋๋ผ๋ ์๋ ์ฆ๊ฐ ๊ธฐ๋ณธ ํค๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ด ์ข์ต๋๋ค.
์ด ์ฃผ์ ์ ๊ด์ฌ์ด ์๋ค๋ฉด -
๊ฒฐ๊ณผ
์ฐ๋ฆฌ๊ฐ ๋์ถํ ์ ์๋ ์ฃผ์ ๊ฒฐ๋ก ์ ์ฐ๋ฆฌ๊ฐ ๋งํ๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ํฌ๊ธฐ์ ๊ด๊ณ์์ด ํญ์ ์ฟผ๋ฆฌ ์คํ ์๋๋ฅผ ๋ถ์ํด์ผ ํ๋ค๋ ๊ฒ์ ๋๋ค. ์์ฆ์๋ ์๋ฃจ์ ์ ํ์ฅ์ฑ์ด ๋งค์ฐ ์ค์ํ๋ฉฐ, ํน์ ์์คํ ์์ ์์ ์์๋ถํฐ ๋ชจ๋ ๊ฒ์ด ์ฌ๋ฐ๋ฅด๊ฒ ์ค๊ณ๋๋ฉด ์์ผ๋ก ๊ฐ๋ฐ์๊ฐ ๋ง์ ๋ฌธ์ ๋ฅผ ๊ฒช์ง ์๊ฒ ํ ์ ์์ต๋๋ค.
๋ฐ์ดํฐ๋ฒ ์ด์ค ์ฟผ๋ฆฌ๋ฅผ ์ด๋ป๊ฒ ๋ถ์ํ๊ณ ์ต์ ํํฉ๋๊น?
์ถ์ฒ : habr.com