ANY_VALUE 함수

2023. 5. 26.·Oracle/Performance

Oracle 19c에 ANY_VALUE 함수가 추가되었습니다. ANY_VALUE 함수는 집계 함수로 그룹에서 널이 아닌 첫 번째 값을 반환합니다. 이 함수는 첫 번째 값을 찾은 후 집계를 수행하지 않아 결과가 비결정적이고, MIN, MAX 함수보다 속도가 빠른 것으로 알려져 있습니다.

ANY_VALUE ([ DISTINCT | ALL ] expr)

 

테스트를 위해 아래와 같이 테이블을 생성하겠습니다.

-- 1
DROP TABLE t1 PURGE;
CREATE TABLE t1 (c1, c2) AS SELECT CEIL (ROWNUM / 1000000), CEIL (ROWNUM / 1000000) FROM XMLTABLE ('1 to 10000000');

 

아래 쿼리는 수행에 0.65초가 소요됩니다.

-- 2
SELECT   c1, c2, COUNT (*)
    FROM t1
GROUP BY c1, c2;

---------------------------------------------------------------------------------------
| Id  | Operation          | Name | A-Rows |   A-Time   | Buffers | Reads  | Used-Mem |
---------------------------------------------------------------------------------------
|   0 | SELECT STATEMENT   |      |     10 |00:00:00.65 |   15224 |  15221 |          |
|   1 |  HASH GROUP BY     |      |     10 |00:00:00.65 |   15224 |  15221 | 1153K (0)|
|   2 |   TABLE ACCESS FULL| T1   |     10M|00:00:00.15 |   15224 |  15221 |          |
---------------------------------------------------------------------------------------

 

아래 쿼리는 MIN 함수를 사용하고, 수행에 0.63초가 소요됩니다.

-- 3
SELECT   c1, MIN (c2), COUNT (*)
    FROM t1
GROUP BY c1;

---------------------------------------------------------------------------------------
| Id  | Operation          | Name | A-Rows |   A-Time   | Buffers | Reads  | Used-Mem |
---------------------------------------------------------------------------------------
|   0 | SELECT STATEMENT   |      |     10 |00:00:00.63 |   15224 |  15221 |          |
|   1 |  HASH GROUP BY     |      |     10 |00:00:00.63 |   15224 |  15221 | 1021K (0)|
|   2 |   TABLE ACCESS FULL| T1   |     10M|00:00:00.15 |   15224 |  15221 |          |
---------------------------------------------------------------------------------------

 

아래 쿼리는 ANY_VALUE 함수를 사용하고, 수행에 19.3 버전은 1.05초, 21.3 버전은 0.66초가 소요됩니다. 21c에서 성능이 개선된 것으로 보이지만 속도는 MIN 함수와 비슷한 수준입니다.

-- 4: 19.3
SELECT   c1, ANY_VALUE (c2), COUNT (*)
    FROM t1
GROUP BY c1;

---------------------------------------------------------------------------------------
| Id  | Operation          | Name | A-Rows |   A-Time   | Buffers | Reads  | Used-Mem |
---------------------------------------------------------------------------------------
|   0 | SELECT STATEMENT   |      |     10 |00:00:01.05 |   15224 |  15221 |          |
|   1 |  HASH GROUP BY     |      |     10 |00:00:01.05 |   15224 |  15221 | 1021K (0)|
|   2 |   TABLE ACCESS FULL| T1   |     10M|00:00:00.15 |   15224 |  15221 |          |
---------------------------------------------------------------------------------------

-- 4-2: 21.3
----------------------------------------------------------------------------
| Id  | Operation          | Name | A-Rows |   A-Time   | Buffers | Reads  |
----------------------------------------------------------------------------
|   0 | SELECT STATEMENT   |      |     10 |00:00:00.66 |   15225 |  15221 |
|   1 |  HASH GROUP BY     |      |     10 |00:00:00.66 |   15225 |  15221 |
|   2 |   TABLE ACCESS FULL| T1   |     10M|00:00:00.15 |   15225 |  15221 |
----------------------------------------------------------------------------

 

관련 링크

  • SQL Language Reference - ANY_VALUE
  • ORACLE-BASE - ANY_VALUE Aggregate Function in Oracle Database 21c
저작자표시 비영리 변경금지 (새창열림)
'Oracle/Performance' 카테고리의 다른 글
  • Parallel Conventional Load
  • Parallel 힌트와 JPPD 쿼리 변환
  • INSERT ALL 문에 대한 변경 정보
  • INSERT 문의 수행 방식에 따른 Redo와 Undo의 생성량
정희락
정희락
2007년부터 Oracle Database 성능 최적화에 관심을 가져왔습니다. 현재 한국오라클 Engineered Systems Solution Engineering 팀에서 Solution Engineer로 근무하고 있습니다. 이 블로그는 개인적인 연구 목적으로 운영되며 Oracle 사의 공식적인 입장을 대변하지 않습니다.
  • 정희락
    TunA
    정희락
  • 전체
    오늘
    어제
    • 분류 전체보기 (201)
      • Oracle (173)
        • SQL (33)
        • PLSQL (10)
        • Performance (74)
        • Administration (37)
        • Installation (3)
        • Utilities (1)
        • JSON (8)
        • Vector (7)
      • Exadata (15)
      • SQL*Plus (2)
      • Linux (5)
      • Resources (6)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 도서

    • 불친절한 SQL 프로그래밍
    • 불친절한 PL/SQL 프로그래밍
  • 링크

    • Connor McDonald
    • Frits Hoogland
    • Jonathan Lewis
    • Julian Dontcheff
    • Julian Dyke
    • Kun Sun
    • Maria Colgan
    • Martin Bach
    • Mike Dietrich
    • Tanel Poder
  • 공지사항

  • 인기 글

  • 태그

    12c
    19c
    21c
    23ai
    case study
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
정희락
ANY_VALUE 함수
상단으로

티스토리툴바