WINDOW FUNCTION 의이해와활용방법 엑셈컨설팅본부 / DB 컨설팅팀정동기 개요 Window Function 이란행과행간의관계를쉽게정의할수있도록만든함수이다. 윈도우함수를활용하면복잡한 SQL 들을하나의 SQL 문장으로변경할수있으며반복적으로 ACCESS 하는비효율역

Similar documents
Bind Peeking 한계에따른 Adaptive Cursor Sharing 등장 엑셈컨설팅본부 /DB 컨설팅팀김철환 Bind Peeking 의한계 SQL 이최초실행되면 3 단계의과정을거치게되는데 Parsing 단계를거쳐 Execute 하고 Fetch 의과정을통해데이터

배치프로그램에서튜닝대상 SQL 추출하기 엑셈컨설팅본부 /DB 컨설팅팀박성호 배치프로그램의성능문제를진단하기위해트레이스를사용할수없고, 개별 SQL 에대한성 능점검은비효율적인경우에어떻게배치프로그램의성능문제를제대로파악하고개선안을도 출할것인가? 복잡한로직을가지고있는프로그램 (

Commit_Wait / Commit_Logging 두파라미터를통해 Log File Sync 대기시간을감소시킬수있다는것은놀라움과의아함을동시에느낄수있다. 단지파라미터의수정을통해당연히대기해야하는시간을감축한다는것은분명성능을개선해야하는입장에서는놀라운일이될것이다. 반면, 그에따

SQL Server 에서 SQL 튜닝시알아야할힌트와사용 방법 엑셈컨설팅본부 /DB 컨설팅팀박성호 Optimizer 가 SQL 을해석할때항상최적의실행계획을생성하지는못한다. 복잡한 SQL 일수록최적의실행계획을생성하기위해고려해야할대상 (Table, Index 가많은경우 )

Microsoft PowerPoint - 10Àå.ppt

데이터베이스-4부0816

2002 Game White paper 2002 Game White paper

Result Cache 동작원리및활용방안 엑셈컨설팅본부 /DB 컨설팅팀김철환 개요 ORACLE DBMS 를사용하는시스템에서 QUERY 성능은무엇보다중요한요소중하나이며그 성능과직접적인관련이있는것이 I/O 이다. 많은건수를 ACCESS 해야만원하는결과값을얻을수있는 QUER

강의 개요

목차 BUG 문법에맞지않는질의문수행시, 에러메시지에질의문의일부만보여주는문제를수정합니다... 3 BUG ROUND, TRUNC 함수에서 DATE 포맷 IW 를추가지원합니다... 5 BUG ROLLUP/CUBE 절을포함하는질의는 SUBQUE

NLJ BATCH 과부분범위처리 엑셈컨설팅본부 / DB 컨설팅팀오수영 개요 오라클은새로운버전이출시될때마다한층업그레이드된기능들이추가된다. 이기능들은사용자에게편리함을제공함은물론이고, 기존의기능들이성능적으로업그레이드되어보다강력해지기도한다. 그러나때로는새롭게추가된기능으로인해,

음악부속물

음악부속물

음악부속물


다양한 예제로 쉽게 배우는 오라클 SQL 과 PL/SQL

*캐릭부속물

PART

£01¦4Àå-2

½ºÅ丮ÅÚ¸µ3_³»Áö

272*406OSAKAÃÖÁ¾-¼öÁ¤b64ٽÚ

Part Part

DBMS & SQL Server Installation Database Laboratory

10.ppt

만화부속물

만화부속물

TITLE

빅데이터분산컴퓨팅-5-수정

ORACLE EXADATA HCC 압축방식이해하기 엑셈컨설팅본부 /DB 컨설팅팀김철환 개요 시간이지나면서데이터는급속하게증가하고있다. 데이터가증가함에따라 DBMS 에서관리되어지는정보도급속하게증가하고있다. 이로인해저장공간의부족으로하드웨어비용의증가와데이터처리성능에많은문제점들

第 1 節 組 織 11 第 1 章 檢 察 의 組 織 人 事 制 度 등 第 1 項 大 檢 察 廳 第 1 節 組 대검찰청은 대법원에 대응하여 수도인 서울에 위치 한다(검찰청법 제2조,제3조,대검찰청의 위치와 각급 검찰청의명칭및위치에관한규정 제2조). 대검찰청에 검찰총장,대

13주-14주proc.PDF

InsertColumnNonNullableError(#colName) 에해당하는메시지출력 존재하지않는컬럼에값을삽입하려고할경우, InsertColumnExistenceError(#colName) 에해당하는메시지출력 실행결과가 primary key 제약에위배된다면, Ins

단답형 (26 회기출문제 ) 1. 아래와같은테이블이있을때아래의 SQL 결과에대해서 Oracle, SQL Server 순서로적으시오 TAB1 COL1 CHAR(10) COL2 CHAR(10) INSERT INTO TAB1 VALUES ('1',''); INSERT INT

Spring Boot/JDBC JdbcTemplate/CRUD 예제

@OneToOne(cascade = = "addr_id") private Addr addr; public Emp(String ename, Addr addr) { this.ename = ename; this.a

그리고.. 엑셀에하나둘완료된쿼리가늘어날때마다... 희열을느낀다... 이글을보는당신은어떻게할것인가? A 군의판단이잘못된것인가? 잘못된판단이아니다최선의판단이다... 11g 전까지는... 11g New Feature 인 Pending Statistics 를 SPA 와함께사용

5장 SQL 언어 Part II

歯sql_tuning2

´ÙÁß Row °á°ú¸¦ ´ÜÀÏÇàÀ¸·Î Äĸ¶·Î ºÐ¸®ÇØ Ãâ·ÂÇÏ´Â ¹æ¹ý

제목 레이아웃

Microsoft PowerPoint - Oracle Data Access Pattern.ppt

목차 BUG DEQUEUE 의 WAIT TIME 이 1 초미만인경우, 설정한시간만큼대기하지않는문제가있습니다... 3 BUG [qp-select-pvo] group by 표현식에있는컬럼을참조하는집합연산이존재하지않으면결괏값오류가발생할수있습니다... 4

SQL PLAN MANAGEMENT 활용 엑셈컨설팅본부 /DB 컨설팅팀장정민 개요 오라클은비롯한많은관계형 DBMS 에서는사용자의 SQL 질의를효율적으로처리하기위해옵티마이저를사용하고있다. 옵티마이저는유저가수행하는 SQL 을받아실행계획을생성하고, 실제 SQL 은이실행계획을

PowerPoint 프레젠테이션

다양한 예제로 쉽게 배우는 오라클 SQL 과 PL/SQL

문서 템플릿

*2009데이터_3부

ALTIBASE HDB Patch Notes

소만사 소개

MS-SQL SERVER 대비 기능

대량의 DML 작업에대한성능개선방안 엑셈컨설팅본부 /DB 컨설팅팀박준연 개요 대량의데이터를변경해야하는작업은그자체만으로도큰부담으로다가온다. 하지만변경작업자체에만국한되는것이아니라변경되기전데이터와변경이후데이터를각각저장관리해야하는메커니즘이라면성능을개선해야하는입장에서는더욱큰부담

게임백서-상하-색인 목차

게임백서-상하-색인 목차

게임백서-상하-색인 목차

Microsoft Word - [Unioneinc] 특정컬럼의 통계정보 갱신_ _ldh.doc

3 S Q L A n t i p a t t e r n s Trees/intro/parent.sql CREATE TABLE Comments ( comment_id SERIAL PRIMARY KEY, parent_id BIGINT UNSIGNED, comment TEXT

다양한 예제로 쉽게 배우는 오라클 SQL 과 PL/SQL

Tablespace On-Offline 테이블스페이스 온라인/오프라인

윈도우시스템프로그래밍

untitled

윈백및업그레이드 Tibero Flashback 가이드

SKINFOSEC-CHR-028-ASP Mssql Cookie Sql Injection Tool 분석 보고서.doc

2015 경제ㆍ재정수첩

untitled

8 장데이터베이스 8.1 기본개념 - 데이터베이스 : 데이터를조직적으로구조화한집합 (cf. 엑셀파일 ) - 테이블 : 데이터의기록형식 (cf. 엑셀시트의첫줄 ) - 필드 : 같은종류의데이터 (cf. 엑셀시트의각칸 ) - 레코드 : 데이터내용 (cf. 엑셀시트의한줄 )



슬라이드 1

PowerPoint Presentation

歯3-한국.PDF

윈도우시스템프로그래밍

한지붕두가족 MS SQL Server 2012 Identity 와 Sequence 엑셈컨설팅본부 /SQL Server 팀이제춘 1992 년 MS 가 Windows NT 에서운용되는첫번째 SQL Server(4.2) 를 2 출시한이후 20 년이흘렀다. 그간꾸준한발전을통해

Intra_DW_Ch4.PDF

빅데이터 분산 컴퓨팅 -6

제목을 입력하세요.

?

목 차

RDB개요.ppt

KEEP BUFFER 활용방안 엑셈컨설팅본부 /DB 컨설팅팀장정민 개요 Oracle 은유저가요청한작업을빠르게처리하기위해 Buffer Cache 라는것을사용한다. Buffer Cache 는 SGA 에위치하고있으며, 오라클인스턴스에접속하는모든프로세스에의해공유된다. 이 Bu

Microsoft PowerPoint - 1_3_DBA_SQL_tuning

<BFB9BCFAB0E6BFB5C1F6BFF8BCBEC5CD5F BFB9BCFAB0E6BFB520C4C1BCB3C6C FB3BBC1F628C3D6C1BEBBF6BAAFC8AF292E706466>

Connection 8 22 UniSQLConnection / / 9 3 UniSQL OID SET

슬라이드 1

PowerPoint 프레젠테이션

MySQL-Ch10

I T C o t e n s P r o v i d e r h t t p : / / w w w. h a n b i t b o o k. c o. k r

구축환경 OS : Windows 7 그외 OS 의경우교재 p26-40 참조 Windows 의다른버전은조금다르게나타날수있음 Browser : Google Chrome 다른브라우저를사용해도별차이없으나추후수업의모든과정은크롬사용 한

Data Sync Manager(DSM) Example Guide Data Sync Manager (DSM) Example Guide DSM Copyright 2003 Ari System, Inc. All Rights reserved. Data Sync Manager

다양한 예제로 쉽게 배우는 오라클 SQL 과 PL/SQL

리눅스 free 메모리의이해 엑셈컨설팅본부 /DB 컨설팅팀임경석 개요 리눅스환경에서메모리사용률을모니터링하기위해명령어를실행하다보면시스템을기동한지얼마되지않아 free 영역의지표가급격히줄어드는것을쉽게확인할수있다. 리눅스어드민경험이있는사람이라면이것이무엇을의미하는지알수있지만그렇

중간고사

2016지명원(한글본문)수정

6장. SQL

ORANGE FOR ORACLE V4.0 INSTALLATION GUIDE (Online Upgrade) ORANGE CONFIGURATION ADMIN O


sms_SQL.hwp

Ç¥Áö

Microsoft Word MetOne237Bmanual

ALTIBASE HDB Patch Notes

예제 1.1 ( 관계연산자 ) >> A=1:9, B=9-A A = B = >> tf = A>4 % 4 보다큰 A 의원소들을찾을경우 tf = >> tf = (A==B) % A

Transcription:

WINDOW FUNCTION 의이해와활용방법 엑셈컨설팅본부 / DB 컨설팅팀정동기 개요 Window Function 이란행과행간의관계를쉽게정의할수있도록만든함수이다. 윈도우함수를활용하면복잡한 SQL 들을하나의 SQL 문장으로변경할수있으며반복적으로 ACCESS 하는비효율역시쉽게해결할수있다. 이번화이트페이퍼에서는 Window Function 중순위 RANK, ROW_NUMBER, DENSE_RANK), 집계 COUNT) 에관련된부분을다루게될것이다. Window Function Syntax Window Function 은 Over) 함수가기본적으로포함되어야한다. Over) 함수와함께 Window Function 이함께쓰인다. SELECT WINDOW_FUNCTION ARGUMENTS) OVER [PARTITION BY 칼럼 ]] [ORDER BY 절 ] [WINDOWING 절 ] ) FROM 테이블명 ; partition by: 순위를정하는기준칼럼 GROUP BY 와동일 ) order by: 기준칼럼 partition by) 의데이터중 order by 절에기술된칼럼으로순위 를정한다. 테스트관련 Script. drop table t3 purge ; drop table t4 purge ; create table t3 c1 number, c2 char1)) ; create table t4 c1 number, c2 char1), c3 number) ; Part 1 ORACLE 237

insert into t3 values 1, 'A') ; insert into t3 values 1, 'B') ; insert into t3 values 1, 'C') ; insert into t3 values 2, 'D') ; insert into t3 values 2, 'E') ; insert into t3 values 2, 'F') ; insert into t3 values 3, 'G') ; insert into t3 values 3, 'H') ; insert into t3 values 3, 'I') ; commit ; insert into t4 values 1, 'A', 5) ; insert into t4 values 1, 'A', 10) ; insert into t4 values 1, 'A', 10) ; insert into t4 values 1, 'A', 15) ; insert into t4 values 1, 'B', 20) ; insert into t4 values 1, 'B', 25) ; insert into t4 values 1, 'C', 30) ; insert into t4 values 2, 'D', 1) ; insert into t4 values 2, 'D', 2) ; insert into t4 values 2, 'E', 3) ; insert into t4 values 2, 'F', 5) ; insert into t4 values 2, 'E', 4) ; insert into t4 values 3, 'G', 1) ; insert into t4 values 3, 'G', 2) ; insert into t4 values 3, 'I', 1) ; commit ; COUNT) SELECT C1,C2,C3 AND C2 = 'A' ; C1 C2 C3 ----- -- ---------- 1 A 5 238 2013 기술백서 White Paper

1 A 10 1 A 10 SELECT C1, C2, COUNT*) WHERE C2 = 'A' GROUP BY C1, C2 ORDER BY C1, C2 ; C1 C2 COUNT*) -------- -- ---------- 1 A 4 SELECT C1, C2, C3, COUNT*) AND C2 = 'A' GROUP BY C1, C2, C3 ORDER BY C1, C2, C3 ; COUNT*) ----- -- ---------- ---------- 1 A 5 1 1 A 10 2 1 < 최종추출데이터 > select c1,c2,c3 from T4 AND C2 = 'A' ; C3_CNT TOTAL_CNT --------- -- ---------- ---------- ---------- 1 A 5 1 4 1 4 Part 1 ORACLE 239

위의 < 추출데이터 > 의의도는 c1=1 and c2 = 'A' 인데이터를모두추출하면서 c1, c2 칼럼으로그룹핑된건수와 c1, c2, c3 로그룹핑된건수를같이보여주려는것이다. 단순하게아래 SQL[1] 과같이 T4 테이블의데이터를중복액세스 COUNT 수행하기위해 ) 를수행하여처리할수도있다. 물론, < 추출데이터 > 의데이터를보여줄수는있지만 SQL 의성능은손해를볼수밖에없다. SQL[1]. 성능문제가발생하는 SQL 작성유형 SELECT T4.C1, T4.C2, T4.C3, T5.C3_CNT, T6.TOTAL_CNT, SELECT C1, C2, C3, COUNTC3) AS C3_CNT AND C2 = 'A' GROUP BY C1, C2, C3 ) T5, SELECT C1, C2, COUNTC3) AS TOTAL_CNT AND C2 = 'A' GROUP BY C1, C2 ) T6 WHERE T4.C1 = 1 AND T4.C2 = 'A' AND T4.C1 = T5.C1 AND T4.C2 = T5.C2 AND T4.C3 = T5.C3 AND T4.C1 = T6.C1 AND T4.C2 = T6.C2 ORDER BY C1,C2,C3 ; 240 2013 기술백서 White Paper

C3_CNT TOTAL_CNT -------- -- ---------- ---------- ---------- 1 A 5 1 4 1 4 아래 SQL[2] 는 T4 테이블의데이터를중복액세스하지않기위해 Oracle 9i 이후버전에서는 SELECT AS WITH CLAUSE 을이용하여 T4 테이블의데이터를중복액세스하지않고 1 회수 행만으로의도한데이터를추출할수있다 SQL[2]. 성능문제가발생하는 SQL 작성유형 WITH T1 AS SELECT C1,C2,C3 AND C2 = 'A' ) SELECT T4.C1, T4.C2, T4.C3, T5.C3_CNT, T6.TOTAL_CNT FROM T1 T4, SELECT C1, C2, C3, COUNTC3) AS C3_CNT FROM T1 GROUP BY C1, C2, C3 ) T5, SELECT C1, C2, COUNTC3) AS TOTAL_CNT FROM T1 GROUP BY C1, C2 ) T6 WHERE T4.C1 = T5.C1 AND T4.C2 = T5.C2 AND T4.C3 = T5.C3 Part 1 ORACLE 241

AND T4.C1 = T6.C1 AND T4.C2 = T6.C2 ORDER BY C1,C2,C3 ; C3_CNT TOTAL_CNT --------- -- ---------- ---------- ---------- 1 A 5 1 4 1 4 그러나, 문제가있다. WITH CLAUSE 을이용해 T4 테이블의데이터를 1 회만읽는다는것은 C1 = 1 AND C2 = 'A' 조건에해당하는모든데이터를 GLOBAL TEMPORARY TABLE 에저장 해두고재사용하겠다는의미이다. 그런데, 만약 C1 = 1 AND C2 = 'A' 조건에해당하는데이터많고, OLTP 환경에서빈번하게조회되는 SQL 문이라면 GLOBAL TEMPORARY TABLE 을생성하여처리하는작업자체가부담이될수있다. 또한, 해당 SQL 이페이징시사용되는쿼리문이라면부분범위가되지않는또다른문제점이발생할수있다. 위의 SQL 에서 T4 테이블의데이터를불필요하게중복액세스처리하지않고, SQL 의성능까지 고려한 SQL 작성법은아래와같이 COUNT*) OVER ) 를활용하는것이다. SQL[1]. SQL[2] 의성능문제를해결할수있는 SQL 작성유형 SELECT C1, C2, C3, COUNT*) OVER PARTITION BY C1,C2,C3) AS C3_CNT, COUNT*) OVER PARTITION BY C1,C2) AS TOTAL_CNT WHERE C2 = 'A' ORDER BY C1,C2,C3 ; C3_CNT TOTAL_CNT -------- -- ---------- ---------- ---------- 1 A 5 1 4 242 2013 기술백서 White Paper

1 4. RANK), ROW_NUMNER), DENSE_RANK) select t3.c1, t3.c2, t4.c3 from t3, t4 and t3.c2 in 'A','E','G') order by 1,2,3 ; -------- -- ---------- 1 A 5 1 A 10 1 A 10 2 E 3 3 G 1 3 G 2 < 최종추출데이터 > -------- -- ---------- 위와같은데이터를추출하고자할때 C2 의값이 'A','E','G' 인데이터중 C3 가가장큰값을추출하여야 < 추출데이터 > 를추출할수있다. Oracle 10g 이전에는아래와같은패턴으로 SQL 을작성하여데이터를추출하였는데동일테이블을 2 번반복하여처리하였었다. Part 1 ORACLE 243

SQL[1] select t3.c1, t3.c2, t4.c3 from t3, t4, select t3.c1, t3.c2, maxt4.c3) max_c3 from t3, t4 and t3.c2 in 'A','E','G') group by t3.c1, t3.c2 ) t5 and t4.c3 = t5.max_c3 and t3.c2 in 'A','E','G') ; -------- -- ---------- 3 G 2 Oracle 10g 이후에는위에서본 < 추출데이터 > 를추출하기위한방법으로신규로추가된 Analytic Function 을사용하면동일테이블을중복처리하지않고 1 회만처리가되도록 SQL 을작성할수있다. 이때사용되는 FUNCTION 이 RANK, DENSE_RANK, ROW_NUMBER 이다. SQL[1]. RANK 활용 select t3.c1, t3.c2, t4.c3 from t3, select c1, c2, 244 2013 기술백서 White Paper

c3, rank) over partition by c1,c2 order by c3 desc) as rank_check from t4 ) t4 and t3.c2 in 'A','E','G') and t4.rank_check = 1 ; -------- -- ---------- 3 G 2 SQL[2]. ROW_NUMBER 활용 select c1, c2, c3 from select t3.c1, t3.c2, t4.c3, row_number) over partition by t3.c1, t3.c2 order by t4.c3 desc ) as rnum from t3, t4 and t3.c2 in 'A','E','G') ) where rnum <= 1 ; ------ -- ---------- 3 G 2 Part 1 ORACLE 245

SQL[3]. DENSE_RANK 활용 select t3.c1, t3.c2, t4.c3 from t3, select c1, c2, c3, dense_rank) over partition by c1,c2 order by c3 desc) as rank_check from t4 ) t4 and t3.c2 in 'A','E','G') and t4.rank_check = 1 ; ------ -- ---------- 3 G 2 SQL[1], SQL[2], SQL[3] 은 < 추출데이터 > 에부합되는데이터를추출할수있다. 여기에서사용된 Analytic Function 은 RANK, DENSE_RANK, ROW_NUMBER 이다. RANK, DENSE_RANK, ROW_NUMBER Analytic Function 은데이터의순위를정하는분석함수인데정확한쓰임새를알필요가있다 select c1, c2, c3, rank) overpartition by c1, c2 order by c3 desc) as rank, dense_rank) overpartition by c1, c2 order by c3 desc) as dense_rank, row_number) overpartition by c1, c2 order by c3 desc) as row_number from t4 where c2 = 'A' ; 246 2013 기술백서 White Paper

RANK DENSE_RANK ROW_NUMBER ------- -- ---------- ---------- ---------- ---------- 1 1 1 1 A 10 2 2 2 1 A 10 2 2 3 1 A 5 4 3 4 RANK: 같은순위 RANK-2) 에같은값이 2 개일때다음값의순위는 RANK-4 가된 다. DENSE_RANK: 같은순위 RANK-2) 에같은값이 2 개일때다음값의순위는 RANK-3 가된다. ROW_NUMBER: 같은순위더라도순위가매겨진다. 결론 지금까지몇가지 Window Function 활용방법에대해서간단히알아보았다. 비록간단한예제이지만해당 Window Function 을잘활용한다면실제업무 SQL 작성시에좀더효율적인 SQL 을작성할수있을것이다. Part 1 ORACLE 247