테마
정산 화면 상단의 「고객 미확인 주문」 배지는 주문 원장의 고객번호가 고객 마스터에 없는(고객명이 붙지 않는) 주문이 몇 건인지 보여 준다. 정산 담당자 10명이 화면을 열 때마다 돌아서 하루 약 300번 실행되고, 한 번에 0.47초 걸린다. 이 SQL을 짠 조민우는 "고객은 2,000명뿐이니 스칼라 서브쿼리면 캐시돼서 2,000번만 간다. 06화의 지역명도 Starts 8이었다"라고 했다.
T_ORD_BIG: 1,000,000행 · 5,826블록 · CUS_ID 2,000종류가 정확히 500번씩 돌아가며 들어 있다 (CUS_000001, CUS_000002, … 순서)M_CUS: 2,000행 · 30블록 · PK_M_CUS (CUS_ID)_query_execution_cache_max_size는 기본값 (131,072바이트)SELECT COUNT(*) AS ord_cnt,
COUNT(nm) AS named_cnt, -- ord_cnt - named_cnt = 고객 미확인 주문
MAX(nm) AS nm_sample
FROM (SELECT (SELECT c.CUS_NM FROM M_CUS c WHERE c.CUS_ID = o.CUS_ID) AS nm
FROM T_ORD_BIG o)
---------------------------------------------------------------------------------------------
| Id | Operation | Name | Starts | E-Rows | A-Rows | A-Time | Buffers |
---------------------------------------------------------------------------------------------
| 0 | SELECT STATEMENT | | 1 | | 1 |00:00:00.47 | 779K|
| 1 | TABLE ACCESS BY INDEX ROWID| M_CUS | 752K| 1 | 752K|00:00:00.32 | 774K|
|* 2 | INDEX UNIQUE SCAN | PK_M_CUS | 752K| 1 | 752K|00:00:00.12 | 21011 |
| 3 | SORT AGGREGATE | | 1 | 1 | 1 |00:00:00.47 | 779K|
| 4 | TABLE ACCESS FULL | T_ORD_BIG | 1 | 1000K| 1000K|00:00:00.05 | 5826 |
---------------------------------------------------------------------------------------------
Predicate Information (identified by operation id):
---------------------------------------------------
2 - access("C"."CUS_ID"=:B1)
(DBMS_XPLAN 이 줄여 쓴 값 — 752K = 752,995 · 779K = 779,832 · 774K = 774,006)