Paging
๋ด๋์๋ง ๋ณด์ด๋ฉด ๋ผ !
Database Paging
์ ์ฅ๋ ๋ฐ์ดํฐ๋ฅผ ๊บผ๋ด์ค๋ ๊ณณ์ ๋ฐ์ดํฐ๋ฒ ์ด์ค
์ด๋ป๊ฒ ๋ฐ์ดํฐ๋ฅผ ๊บผ๋ด์ฌ๊น ? SQL๋ก....
๊ฒ์ํ ํ ์ด๋ธ๋ก ํ ์คํธ ํด๋ณด์
create table board_content(
-- ๊ฒ์๊ธ ๋ฒํธ
num SERIAL not null,
-- ๊ฒ์๊ธ ์ ๋ชฉ
title VARCHAR not null,
-- ๊ฒ์๊ธ ๋ด์ฉ
content VARCHAR not null,
-- ๋ฑ๋ก ์ผ์
create_date VARCHAR not null,
-- ์์ ์ผ์
update_date VARCHAR not null,
--์กฐํ ์
view_cnt INT not null
);
SELECT COUNT(*) FROM board_content
count |
-------+
3021033|
SQL
๋ณต์ฌ
PostgreSQL/Mysql/Mariadb/CUBRID Style Paging SQL
๊ฒ์๊ธ ์ ์ฒด ์กฐํ ํด๋ณด์
SQL
Plan
Result
Problem
Solution
๊ฒ์๊ธ 10๊ฑด๋ง ๊ฐ์ ธ์๋ณด์
SQL
Plan
Result
Problem
Solution
๊ฒ์๊ธ 10๊ฑด๋ง ๊ฐ์ ธ์๋ณด์ (์์ ๋ณด์ฅ O)
SQL
Plan
Result
Problem
Solution
๊ฒ์๊ธ 10๊ฑด๋ง ๋น ๋ฅด๊ฒ ๊ฐ์ ธ์ค์ (์์ ๋ณด์ฅ O, ์๋ ๋ณด์ฅ O)
SQL
Plan
Result
Problem
Solution
num ๋ด๋ฆผ์ฐจ์์ผ๋ก 20๊ฑด์ 10๊ฑด์ฉ ๋๋ ์ ๋ณด์ (ํ์ด์ง ๋ณด์ฅ O)
SQL
Plan
Result
Problem
Solution
๊ฒ์๊ธ ์์ ์ผ์ ๊ธฐ์ค์ผ๋ก ์ถ๋ ฅ ํ์ (์์ ๋ณด์ฅ, ์๋ ๋ณด์ฅ)
SQL
Plan
Result
Problem
Solution
ORACLE/TIBERO Style Paging SQL
๊ฒ์๊ธ 10๊ฑด๋ง ๊ฐ์ ธ์๋ณด์
SQL
Plan
Result
Problem
Solution
๊ฒ์๊ธ 10๊ฑด๋ง ๊ฐ์ ธ์๋ณด์ (์์ ๋ณด์ฅ X, ์๋ ๋ณด์ฅ O)
SQL
Plan
Reuslt
Problem
Solution
๊ฒ์๊ธ 10๊ฑด๋ง ๊ฐ์ ธ์๋ณด์ (์์ ๋ณด์ฅ O, ์๋ ๋ณด์ฅ O)
SQL
Plan
Result
Problem
Solution
๊ฒ์๊ธ 10๊ฑด๋ง ๊ฐ์ ธ์๋ณด์ (์์ ๋ณด์ฅ O, ์๋ ๋ณด์ฅ O)
SQL
Plan
Result
Problem
Solution
์์ฉ ํ๊ธฐ
2021๋ ์ดํ ์์ฑ(create_date) ๋ ๊ฒ์๊ธ ์ค ๊ฒ์๊ธ ์ ๋ฐ์ดํธ(update_date) ์ต์ ์์ผ๋ก 10๊ฑด ์ ๋ ฌ
LIMIT Style
SQL
Plan
Result
Rownum Style
SQL
Plan
Result
OFFSET ROW FETCH Style
SQL
Plan
Result
์ถฉ๋ถํ ๋น ๋ฅธ๋ฐ... ๋ ๋น ๋ฅด๊ฒ ํ๊ณ ์ถ๋ค!
๋ฉ๋ชจ๋ฆฌ์์๋ง ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ ธ์ค๋ฉด ์ด๋ค ํจ๊ณผ๊ฐ ์์๊น ?
SELECT
*
FROM
(
SELECT
/*+ RESULT_CACHE */ *
FROM
board_content
ORDER BY
title
) test
WHERE
ROWNUM <= 10;
SQL
๋ณต์ฌ
Total elapsed time 00:00:01.095000
Execution Plan
--------------------------------------------------------------------------------
1 RESULT CACHE (Cost:50336, %%CPU:0, Rows:10)
2 ORDER BY (SORT) TOP-N (Cost:50336, %%CPU:0, Rows:10)
3 TABLE ACCESS (FULL): BOARD_CONTENT (Cost:16099, %%CPU:0, Rows:3027390)
Note
--------------------------------------------------------------------------------
3 - dynamic sampling used for this table (98 blocks)
NAME VALUE
------------------------------ ----------
db block gets 620
consistent gets 38570
physical reads 0
redo size 0
sorts (disk) 0
sorts (memory) 4
rows processed 10
SQL
๋ณต์ฌ
Total elapsed time 00:00:00.005849
Execution Plan
--------------------------------------------------------------------------------
1 RESULT CACHE (Cost:50336, %%CPU:0, Rows:10)
2 ORDER BY (SORT) TOP-N (Cost:50336, %%CPU:0, Rows:10)
3 TABLE ACCESS (FULL): BOARD_CONTENT (Cost:16099, %%CPU:0, Rows:3027390)
Note
--------------------------------------------------------------------------------
3 - dynamic sampling used for this table (98 blocks)
NAME VALUE
------------------------------ ----------
db block gets 0
consistent gets 0
physical reads 0
redo size 0
sorts (disk) 0
sorts (memory) 0
rows processed 10
SQL
๋ณต์ฌ
๋ฉ๋ชจ๋ฆฌ์์๋ง ๊ฐ์ ธ์ค์ (์ฌ์ฉ ์กฐ๊ฑด : ์กฐํ ๊ฒฐ๊ณผ๋ฅผ ๋ฏธ๋ฆฌ Query Result Cache์ ๋ณด๊ดํ๊ธฐ ๋๋ฌธ์ ์์ฃผ ๋ณํ์ง ์๋๋ค๋ ๊ธฐ์ค)
SQL
Plan
Result