테마
본사 영업팀은 매일 아침 「어제 세트 메뉴를 하나도 못 판 매장」 목록을 매장 담당자에게 보낸다. 세트 판매가 0인 매장은 메뉴판이나 POS 버튼에 문제가 있는 경우가 많아서다. 지난달 이 SQL을 정리한 뒤로 목록이 날마다 0곳이다. 그런데 리모델링으로 12월 29일과 30일 이틀 문을 닫은 SH0042 매장도 그 이틀 목록에 없었다.
SHOP 매장: 200행 · 5블록 · PK (SHOP_NO)ORD 주문: 1,000,000행 · 22,422블록 · ORD_PK (ORD_NO) · ORD_X01 (ORD_DT, ORD_HMS) · 2013-12-30 주문 1,371건 · SHOP_NO는 NULL 허용(값은 다 있다)ORD_ITEM 주문상품: 2,472,717행 · 55,265블록 · ORD_ITEM_PK (ORD_NO, ITEM_ID) · 그날 3,389줄ITEM 메뉴: 92행 · 5블록 · ITEM_PK (ITEM_ID) · 세트 메뉴(ITEM_TYPE_CD = '100101') 17개:v_dt = '20131230'SELECT s.SHOP_NO, s.SHOP_NM
FROM SHOP s
WHERE NOT EXISTS (SELECT 1
FROM ORD o, ORD_ITEM d, ITEM i
WHERE o.SHOP_NO = SHOP_NO
AND o.ORD_DT = :v_dt
AND d.ORD_NO = o.ORD_NO
AND i.ITEM_ID = d.ITEM_ID
AND i.ITEM_TYPE_CD = '100101')
ORDER BY s.SHOP_NO
---------------------------------------------------------------------------------------------------------------
| Id | Operation | Name | Starts | E-Rows | A-Rows | A-Time | Buffers |
---------------------------------------------------------------------------------------------------------------
| 0 | SELECT STATEMENT | | 1 | | 0 |00:00:00.01 | 28 |
| 1 | SORT ORDER BY | | 1 | 199 | 0 |00:00:00.01 | 28 |
|* 2 | FILTER | | 1 | | 0 |00:00:00.01 | 28 |
| 3 | TABLE ACCESS FULL | SHOP | 0 | 200 | 0 |00:00:00.01 | 0 |
| 4 | NESTED LOOPS | | 1 | 1 | 1 |00:00:00.01 | 28 |
| 5 | NESTED LOOPS | | 1 | 2 | 7 |00:00:00.01 | 14 |
|* 6 | TABLE ACCESS BY INDEX ROWID BATCHED| ORD | 1 | 1371 | 3 |00:00:00.01 | 5 |
|* 7 | INDEX RANGE SCAN | ORD_X01 | 1 | 1371 | 3 |00:00:00.01 | 3 |
|* 8 | INDEX RANGE SCAN | ORD_ITEM_PK | 3 | 2 | 7 |00:00:00.01 | 9 |
|* 9 | TABLE ACCESS BY INDEX ROWID | ITEM | 7 | 1 | 1 |00:00:00.01 | 14 |
|* 10 | INDEX UNIQUE SCAN | ITEM_PK | 7 | 1 | 7 |00:00:00.01 | 7 |
---------------------------------------------------------------------------------------------------------------
Predicate Information (identified by operation id):
---------------------------------------------------
2 - filter( NOT EXISTS (SELECT 0 FROM "ITEM" "I","ORD_ITEM" "D","ORD" "O" WHERE "O"."ORD_DT"=:V_DT AND
"O"."SHOP_NO" IS NOT NULL AND "D"."ORD_NO"="O"."ORD_NO" AND "I"."ITEM_ID"="D"."ITEM_ID" AND
"I"."ITEM_TYPE_CD"='100101'))
6 - filter("O"."SHOP_NO" IS NOT NULL)
7 - access("O"."ORD_DT"=:V_DT)
8 - access("D"."ORD_NO"="O"."ORD_NO")
9 - filter("I"."ITEM_TYPE_CD"='100101')
10 - access("I"."ITEM_ID"="D"."ITEM_ID")