전체보기
-
친절한 SQL 튜닝_3장.인덱스 튜닝_3친절한 SQL 튜닝 2020. 9. 5. 10:18
인덱스 튜닝 3.3 인덱스 스캔 효율화 3.3.1 인덱스 탐색 루트 블록에는 키 값을 갖지 않는 특별한 레코드가 하나 있다. 가장 왼쪽에 ‘LMC(Leftmost Child)’ 레코드다. LMC는 자식 노드 중 가장 왼쪽 긑에 위치한 블록을 가리킨다. LMC가 가리키는 주소로 찾아간 블록에는 ‘키 값을 가진 첫 번째 레코드보다 작거나 같은 값’을 갖는 레코드가 저장돼 있다. 수직적 탐색은 스캔 시작점을 찾는 과정이다. 3.3.2 인덱스 스캔 효율성 인덱스 선행 컬럼이 조건절에 없가나 ‘=’ 조건이 아니면 인덱스 스캔 과정에 비효율이 발생한다. 인덱스 스캔 효율설 측정 인덱스 스캔 효율이 좋은지 나쁜지는 어떻게 알 수 있을까? 조건절 데이터를 일일이 조회해 보는 방법도있지만, SQL 트레이스를 통해 쉽게 ..
-
[Oracle] ROW_NUMBER 함수RDS/Oracle 2020. 8. 30. 13:02
ROW_NUMBER 함수란? - 각 PARTITION 내에서 ORDER BY절에 의해 정렬된 순서를 기준으로 고유한 값을 반환하는 함수입니다. - 윈도우 함수(Window Funtion)로 그룹 내 순위 함수입니다. 문법ROW_NUMBER() OVER(PARTITION BY [그룹핑할 컬럼] ORDER BY [정렬할 컬럼])- PARTITION BY는 선택, ORDER BY는 필수 PARTITION BY 미사용1234SELECT ROW_NUMBER() OVER(ORDER BY T1.JOB, T1.ENAME) AS ROW_NUM , T1.* FROM EMP T1 ORDER BY T1.JOB, T1.ENAME;Colored by Color Scriptercs PARTITION BY 사용1234SELECT R..
-
[Oracle] ROWNUM 함수RDS/Oracle 2020. 8. 30. 12:00
ROWNUM 함수란? - 오라클에서 제공하는 가상의 컬럼으로 첫 행은 1부터 시작하여 행 수에 따라 1씩 증가합니다. 123SELECT ROWNUM , T1.* FROM EMP T1;cs ORDER BY 절 사용 시 주의사항 - ROWNUM의 실행 순서는 WHERE절 실행 후이기 때문에 ORDER BY절과 관계없이 ROWNUM이 출력됩니다.1234SELECT ROWNUM , T1.* FROM EMP T1 ORDER BY ENAME ASC;cs - ROWNUM과 ORDER BY절을 같이 사용하기 위해서는 ORDER BY절을 실행한 후 정렬된 결과에 ROWNUM을 추가해야 합니다.1234567SELECT ROWNUM , T2.* FROM ( SELECT T1.* FROM EMP T1 ORDER BY T1.E..
-
친절한 SQL 튜닝_3장.인덱스 튜닝_2친절한 SQL 튜닝 2020. 8. 30. 10:54
인덱스 튜닝 3.2 부분범위 처리 활용 3.2.1 부분범위 처리 DBMS가 클라이언트에게 데이터를 전송할 때도 일정량씩 나누어 전송한다. 전체 결과집합 중 아직 전송하지 않은 분량이 많이 남아있어도 서버 프로세스는 클라이언트로부터 추가 Fetch Call을 받기 전까지 그대로 멈춰 서서 기다린다. OLTP 환경에서 대용량 데이터를 빠르게 핸들링할 수 있는 아주 중요한 원리가 바로 여기에 숨어있다. 예를 들어, 마우스로 클릭하면 아래 JAVA 메소드를 호출하는 실행 버튼이 있다고 하자. SQL문에 사용한 BIG_TABLE이 1억 건에 이르는 대용량 테이블이어도 실행 결과는 버튼을 클릭하자마자 곧바로 화면에 출력된다. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 private void exec..
-
친절한 SQL 튜닝_3장.인덱스 튜닝_1친절한 SQL 튜닝 2020. 8. 30. 09:32
인덱스 튜닝 3.1 테이블 액세스 최소화 3.1.1 테이블 랜덤 액세스 인덱스 ROWID는 물리적 주소? 논리적 주소? 인덱스 ROWID는 논리적 주소다. 디스크 상에서 테이블 레코드를 찾아가기 위한 위치 정보를 담는다. (프로그래밍에서 말하는) 포인터가 아니며, 테이블 레코드와 물리적으로 직접 연결된 구조는 더더욱 아니다. 메인 메모리 DB와 비교 메인 메모리 DB의 경우 인스턴스를 기동하면 디스크에 저장된 데이터를 버퍼캐시로 로딩하고 이어서 인덱스를 생성한다. 이때 인덱스는 오라클처럼 디스크 상의 주소정보를 갖는 게 아니라 메모리상의 주소정보, 즉 포인터(Pointer)를 갖는다. 따라서 인덱스를 경유해 테이블을 액세스하는 비용이 오라클과 비교할 수 없을 정도로 낮다. I/O 메커니즘 복습 DBA(=..
-
[TOAD] 단축키 모음RDS/Tool 2020. 8. 29. 16:57
테이블 정보 상세보기F4 : Table, View, Proc, Funct, Package를 DESC(테이블명 위에 커서를 두고 F4키) 자동완성Ctrl+. : Table Completion (매칭되는 테이블목록 출력)Ctrl+T : Columns Dropdown (해당테이블의 컬럼목록 표시) SQL문 실행F5 : SQL Editor내의 모든 SQL문 실행Ctrl+Enter : 현재 커서의 SQL문 실행F9 : SQL문 실행 후 Grid에 출력 히스토리(과거 수행SQL문 조회)F8 : 과거에 실행한SQL문 HISTORY 목록Alt+Up : History UPAlt+Down : History DOWN 텍스트 대/소문자 변환CTRL+L : 텍스트를 소문자로CTRL+U : 텍스트를 대문자로 주석처리Ctrl+B ..
-
친절한 SQL 튜닝_2장.인덱스 기본친절한 SQL 튜닝 2020. 8. 26. 12:44
2장. 인덱스 기본 2.1 인덱스 구조 및 탐색 2.1.1 미리 보는 인덱스 튜닝 데이터를 찾는 두 가지 방법 1) 테이블 전체를 스캔한다. 2) 인덱스를 이용한다. 인덱스 튜닝의 두 가지 핵심요소 첫 번째는 인덱스 스캔 과정에서 발생하는 비효율을 줄이는 것이다. 즉. ‘인덱스 스캔 효율화 튜닝’이다. 두 번째 핵심요소는 테이블 액세스 횟수를 줄이는 것이다. 인덱스 스캔 후 테이블 레코드를 액세스할 때 랜덤 I/O 방식을 사용하므로 이를 ‘랜덤 액세스 최소화 튜닝’이라고 한다. SQL 튜닝은 랜덤 I/O와의 전쟁 데이터베이스 성능이 느린 이유는 디스크 I/O 때문이다. 읽어야 할 데이터량이 많고, 그 과정에 디스크 I/O가 많이 발생할 때 느리다. 인덱스를 많이 사용하는 OLTP 시스템이라면 디스크 I/..
-
[TOAD] SQL Editor, SQL QueryRDS/Tool 2020. 8. 22. 11:22
SQL Editor 화면SQL Editor는 SQL을 작성하고 편집할 수 있는 Editor 화면과 그 결과를 확인할 수 있는 Data Grid, 그리고 활성화된 Editor창의 SQL정보를 간략하게 표시하는 Navigator 이렇게 세가지 화면으로 이루어져 있습니다. SQL Query 실행 방법SQL Editor에서 작성한 SQL Query를 실행할 수 있는 방법은 4가지가 있습니다.- Execute/Compile Statement- Execute Script- Execute via TSR, Execute via QSR - Execute via SQL*Plus 1.Execute/Compile Statement (단축키 : F9 , Ctrl+ENTER)하나의 SQL문장을 실행 할 때 사용합니다. 그리고 E..
-
친절한 SQL 튜닝_1장.SQL 처리 과정과 I/O친절한 SQL 튜닝 2020. 8. 22. 10:13
SQL 처리 과정과 I/O 1.1 SQL파싱과 최적화 1.1.1 구조적, 집합적, 선언적 질의 언어 SQL은 기본적으로 구조적(structured)이고, 집합적(set-based)이고 선언적인(declarative) 질의 언어이다. DBMS 내부에서 프로시저를 작성하고 컴파일해서 실행 가능한 상태로 만드는 전 과정을 ‘SQL 최적화‘라고 한다. 1.1.2 SQL 최적화 SQL을 실행하기 전 최적화 과정 1.SQL 파싱 사용자로부터 SQL을 전달받으면 가장 먼저 SQL 파서(Parser)가 파싱을 진행한다. 파싱 트리 생성 : SQL문을 이루는 개별 구성요소를 분석해서 파싱 트리 생성 Syntax 체크 : 문법적 오류가 없는지 확인 Semantic 체크 : 의미상 오류가 없는지 확인 2.SQL 최적화 SQ..
-
[Spring Boot] JPA 게시판 만들기(3) - JPA Auditing 설정Spring Boot/2.3.x - JPA 게시판 만들기 2020. 7. 20. 16:08
일반적으로 테이블을 설계할 때 데이터의 생성시간과 수정시간 컬럼을 포함하는데, JPA Auditing을 사용하면 생성시간과 수정시간을 자동으로 관리할 수 있습니다.1.BaseTimeEntity 구현com.rest.api.common.domain 패키지를 생성한 후 BaseTimeEntity 클래스르 추가하세요.BaseTimeEntity.java 더보기 123456789101112131415161718192021222324252627package com.rest.api.common.domain; import java.time.LocalDateTime; import javax.persistence.Column;import javax.persistence.EntityListeners;import j..