테마
정산 목록 화면은 최신 주문부터 한 페이지에 10건씩 보여 주고, 화면 아래에 "총 n건"을 띄운다. 1페이지는 괜찮은데 100페이지쯤 가면 화면이 멈춘 듯 느리다고 한다. 화면은 클릭할 때마다 아래 두 SQL을 보낸다. 아래는 100페이지(991 ~ 1,000번째 행)를 가져올 때의 모습이다.
T_ORD_BIG: 1,000,000행 · 5,826블록. ORD_SEQ는 유일하고, 인덱스는 없다.ORD_DT DESC, ORD_SEQ DESC다(같은 날짜 안에서는 번호 역순).SELECT *
FROM (SELECT ROWNUM rn, a.*
FROM (SELECT ORD_SEQ, CUS_ID, ORD_DT, ORD_AMT
FROM T_ORD_BIG
ORDER BY ORD_DT DESC, ORD_SEQ DESC) a
WHERE ROWNUM <= 1000)
WHERE rn > 990;
SELECT COUNT(*) FROM T_ORD_BIG;
[목록 — 100페이지]
------------------------------------------------------------------------------------------------------------
| Id | Operation | Name | Starts | E-Rows | A-Rows | A-Time | Buffers | Used-Mem |
------------------------------------------------------------------------------------------------------------
| 0 | SELECT STATEMENT | | 1 | | 10 |00:00:00.21 | 5826 | |
|* 1 | VIEW | | 1 | 1000 | 10 |00:00:00.21 | 5826 | |
|* 2 | COUNT STOPKEY | | 1 | | 1000 |00:00:00.21 | 5826 | |
| 3 | VIEW | | 1 | 1000K| 1000 |00:00:00.21 | 5826 | |
|* 4 | SORT ORDER BY STOPKEY| | 1 | 1000K| 1000 |00:00:00.21 | 5826 | 142K (0)|
| 5 | TABLE ACCESS FULL | T_ORD_BIG | 1 | 1000K| 1000K|00:00:00.05 | 5826 | |
------------------------------------------------------------------------------------------------------------
1 - filter("RN">990)
2 - filter(ROWNUM<=1000)
4 - filter(ROWNUM<=1000)
[총건수]
------------------------------------------------------------------------------------
| Id | Operation | Name | Starts | A-Rows | A-Time | Buffers |
------------------------------------------------------------------------------------
| 0 | SELECT STATEMENT | | 1 | 1 |00:00:00.04 | 5826 |
| 1 | SORT AGGREGATE | | 1 | 1 |00:00:00.04 | 5826 |
| 2 | TABLE ACCESS FULL| T_ORD_BIG | 1 | 1000K|00:00:00.04 | 5826 |
------------------------------------------------------------------------------------