테마
버거원 본사 상황판의 「오늘 주문 건수」 타일은 1분마다 새로 고친다. 지난달 코드 리뷰에서 한 개발자가 COUNT(*)를 COUNT(SHOP_NO)로 바꿨다. 리뷰 메모는 이렇다. "별표는 모든 컬럼을 읽으니 컬럼 하나만 세는 것이 빠르다."
그 뒤로 이 타일 SQL이 AWR의 'SQL ordered by Gets' 상위에 올라왔다. 아래는 2013년 12월 24일을 골랐을 때다.
ORD_RANDOM(운영본): 1,000,000행 · 22,414블록 · 무작위 순서로 적재 · ORD_DT VARCHAR2(8) · 하루 약 1,370건(2013-12-24 1,368건)SHOP_NO VARCHAR2(10)는 NULL 허용으로 선언되어 있다(지금 NULL은 0건)ORD_RANDOM_PK (ORD_NO) · ORD_RANDOM_X01 (ORD_DT, ORD_HMS): BLEVEL 2 · 리프 3,774블록 · CLUSTERING_FACTOR 999,958 · 통계 최신SELECT COUNT(SHOP_NO) AS ord_cnt
FROM ORD_RANDOM
WHERE ORD_DT = :v_dt
-------------------------------------------------------------------------------------------------------------
| Id | Operation | Name | Starts | E-Rows | A-Rows | A-Time | Buffers |
-------------------------------------------------------------------------------------------------------------
| 0 | SELECT STATEMENT | | 1 | | 1 |00:00:00.02 | 1376 |
| 1 | SORT AGGREGATE | | 1 | 1 | 1 |00:00:00.02 | 1376 |
| 2 | TABLE ACCESS BY INDEX ROWID BATCHED| ORD_RANDOM | 1 | 1370 | 1368 |00:00:00.02 | 1376 |
|* 3 | INDEX RANGE SCAN | ORD_RANDOM_X01 | 1 | 1370 | 1368 |00:00:00.01 | 8 |
-------------------------------------------------------------------------------------------------------------
Predicate Information (identified by operation id):
---------------------------------------------------
3 - access("ORD_DT"=:V_DT)
COUNT(SHOP_NO)와 COUNT(*)는 뜻도 다를 수 있다는 점을 설명하시오.