# SQLP

202개의 포스트
post-thumbnail

SQL 자격증 - SQLd, SQLp

SQL 이란? Structured Query Language 데이터베이스에서 데이터를 추출하고 조작하는 데에 사용하는 데이터 처리 언어 데이터베이스에 저장된 정보를 쉽게 찾고 정리하는 데에 도움을 주는 도구이다. SQL(Structured Query Language)은 데이터베이스를 직접적으로 액세스할 수 있는 언어로, 데이터를 정의하고(Data Definition), 조작하며(Data Manipulation), 조작한 결과를 적용하거나 취소할 수 있고(Transaction Control), 접근권한을 제어하는(Data Control) 처리들로 구성된다. SQL 자격증 SQL 자격증은 개발자 과정 SQLd, 전문가 과정 SQLp가 있다. 과목 1 : 데이터 모델의 이해 과목 2 : SQL 기본 및 활용 과목 3 : SQL 고급활용 및 튜닝 SQLd는 1, 2 과목을, SQLp는 1, 2, 3 과목 전체를 범위로 한

2023년 8월 30일
·
0개의 댓글
·
post-thumbnail

Attribute

1. 속성 (Attribute)의 개념 2. 엔터티, 인스턴스와 속성, 속성값에 대한 내용과 표기법 3. 속성의 특징 4. 속성의 분류 5. 도메인 6. 속성의 명명

2023년 8월 27일
·
0개의 댓글
·
post-thumbnail

Entity

1. 엔터티의 개념 데이터 모델을 이해할 때 가장 명확하게 이해해야 하는 개념 중에 하나가 바로 엔터티(Entity)이다. 이것은 우리말로 실체, 객체라고 번역하기도 하는데 실무적으로 엔터티라는 외래어를 많이 사용하기 때문에 본 가이드에서는 엔터티라는 용어를 그대로 사용하기로 한다. 엔터티에 대해서 데이터 모델과 데이터베이스의 권위자가 정의한 사항은 다음과 같다. 변별할 수 있는 사물 - Peter Chen (1976) 데이터베이스 내에서 변별 가능한 객체 - C.J Date (1986) 정보를 저장할 수 있는 어떤 것 - James Martin (1989) 정보가 저장될 수 있는 사람, 장소, 물건, 사건 그리고 개념 등 - Thomas Bruce (1992) 위 정의들의 공통점은 다음과 같다. 엔터티는 사람, 장소, 물건, 사건, 개념 등의 명사에 해당한다. 엔터티는 업무상 관리가 필요한 관심사에 해당한다. 엔터티는 저장이 되기 위한 어떤

2023년 8월 23일
·
0개의 댓글
·

SQL 기초(4)-Join 1

leetcode 175 아래 조건에 맞게 SQL문을 작성해보자. 1) first name, last name, city, state를 출력하기 2) address가 없더라도 null로 출력되도록 join할 것 3) 순서는 상관없음 Person +-------------+---------+ | Column Name | Type | +-------------+---------+ | personId | int | | lastName | varchar | | firstName | varchar | +-------------+---------+ Address +-------------+---------+ | Column Name | Type | +-------------+---------+ | addressId | int | | personId | int | | city | varchar | | state

2023년 7월 22일
·
0개의 댓글
·

SQL 전문가_0일차

개요 웹 애플리케이션을 포함한 모든 종류의 애플리케이션은 메모리에 존재하는 연산에 사용한 데이터를 영속화하고 다시 메모리에 로드해 사용가능한 상태로 되돌리는 과정이 필요합니다. 이러한 필연적인 기능을 위한 소프트웨어가 발전해왔고, 이를 DBMS라고 합니다. DBMS중 현재 가장 많이 사용되는 종류는 RDBMS입니다. 애플리케이션이 제공하는 서비스의 가장 중요한, 신뢰성을 제공하기 위한 여러 기능을 제공하는 DBMS이기 때문이라 생각합니다. 위와 같은 이유로, 애플리케이션 개발자는 DBMS, 특히 RDBMS를 숙련되게 다룰 수 있어야합니다. RDBMS의 기본 작동 원리를 이해한 개발자와 그렇지 않은 개발자는 신뢰성있는 애플리케이션 작성에서 큰 실력 차이를 보일 수 밖에 없습니다. 이러한 상황에서 웹 애플리케이션 서버 개발자를 목표로 하고 있는 저 또한 RDBMS의 세부 원리를 파악해야할 필요성이 있습니다. 이에 구체적인 목표를 갖고 집중해 공부하는 것이 효율적인 학습방법이라 생

2023년 6월 25일
·
0개의 댓글
·
post-thumbnail

[SQLP]5장 고급 SQL 튜닝-5. 배치 프로그램 튜닝(2)

[1] 병렬 처리 활용 SQL문이 수행해야 할 작업 범위를 여러 개의 작은 단위로 나누어 여러 프로세스(또는 쓰레드)가 동시에 처리하는 것 여러 프로세스가 동시에 작업하므로 대용량 데이터를 처리할 때 수행 속도를 극적으로 단축 parallel 힌트를 사용할 때는 반드시 Full 힌트도 함께 사용하는 습관이 필요하다. 옵티마이저에 의해 인덱스 스캔이 선택되면 parallel 힌트가 무시되기 때문이다. parallelindex 힌트를 사용할 때, 반드시 index 또는 indexffs 힌트를 함께 사용하는 습관도 필요하다. 옵티마이저에 의해 Full Table Scan이 선택되면 parallel_index 힌트가 무시되기 때문이다. (1) Query Coordinator와 병렬 서버 프로세스 1. Query Coordinator(이하 QC) 병렬 SQL문을 발행한 세션 병렬 서버 프로세스는 실제 작업을 수행하는 개별 세션들이다

2023년 5월 5일
·
0개의 댓글
·

[SQLP]5장 고급 SQL 튜닝-5. 배치 프로그램 튜닝(1)

[1] 배치 프로그램 튜닝 개요 (1) 배치 프로그램이란 일련의 작업들을 하나의 작업 단위로 묶어 연속적으로 일괄 처리하는 것 온라인 프로그램에서도 여러 작업을 묶어 처리하는 경우가 있으므로 이와 구분하려면 한 가지 특징을 더 추가함 => 사용자와의 상호작용(Interaction) 여부 사용자와의 상호작용 없이 대량의 데이터를 처리하는 일련의 작업들을 묶어 정기적으로 반복 수행하거나 정해진 규칙에 따라 자동으로 수행 기업마다 업무 요건이 워낙 복잡 다양하므로 이 외에도 여러 가지 형태가 존재할 수 있으며, 정기 배치 형태가 가장 일반적이다. 1. On-Demand 배치 배치 프로그램이 자동으로 수행되는 주기는 월단위, 주단위, 일단위가 보통이지만, 요즘은 주기가 점점 짧아져 종종 실시간이 요구되기도 한다. 사용자가 요청한 시점에 바로 작업을 시작한다. 2. 정기 배치 정해진 시점(주로 야간)에 실행 이

2023년 5월 5일
·
0개의 댓글
·

[SQLP]5장 고급 SQL 튜닝-4. 파티션 활용

[1] 파티션 개요 (1) 파티셔닝(Partitioning) 테이블 또는 인덱스 데이터를 파티션(Partition) 단위로 나누어 저장하는 것 테이블을 파티셔닝하면 파티션 키에 따라 물리적으로는 별도의 세그먼트에 데이터를 저장하며, 인덱스도 마찬가지다. 파티션되지 않은 일반 테이블일 때는 테이블과 저장영역(Oracle의 세그먼트)이 1:1 관계지만 파티션 테이블일 때는 테이블과 저장영역(Oracle의 세그먼트) 1:M 관계다. 인덱스를 파티셔닝할 때도 마찬가지다. (2) 파티셔닝이 필요한 이유 1. 관리적 측면 : 파티션 단위 백업, 추가, 삭제, 변경 보관주기가 지난 데이터를 별도 장치에 백업하고 지우는 일은 데이터베이스 관리자들의 일상적인 작업이다. 이 때 만약 파티션 없이 대용량 테이블에 이런 작업들을 수행하려면 시간도 오래 걸리고 비효율적이다. 2. 성능적 측면 : 파티션 단위 조회 및 DML 수행, 경합 및 부하 분산

2023년 5월 2일
·
0개의 댓글
·

[SQLP]5장 고급 SQL 튜닝-3. DML 튜닝

[1] 인덱스 유지 비용 (1) 테이블 데이터 변경시 변경할 인덱스 레코드를 찾아가는 비용 + Redo, Undo를 생성하는 비용이 발생한다. 1. Update 수행시 테이블 레코드는 직접 변경하지만 인덱스 레코드는 정렬 상태를 유지하기 위해 Delete & Insert 방식으로 처리한다. Undo 레코드도 2개씩 기록된다. 따라서 변경 컬럼과 관련된 인덱스 개수에 따라 Update 성능이 좌우된다. 2. Insert나 Delete 문일 때 인덱스 모두에 변경을 가하므로 총 인덱스 개수에 따라 성능이 크게 달라진다. 3. 대량의 데이터를 입력/수정/삭제할 때 인덱스 개수가 DML 성능에 큰 영향을 미치므로 인덱스를 모두 Drop하거나 Unusable 상태로 변경한 다음 작업하는 것이 빠를 수 있다. [2] Insert 튜닝 (1) Oracle Insert 튜닝 1. 일반적인 힙 구조 테이블에서의 데이터

2023년 4월 30일
·
0개의 댓글
·

[SQLP]5장 고급 SQL 튜닝-2. 소트 튜닝(2)

[4] 인덱스를 이용한 소트 연산 대체 (1) Sort Order By 대체 [region + custid] 인덱스를 사용하면 sort order by 연산을 대체할 수 있음. 소트 오퍼레이션이 나타나지 않음 소트 대상 레코드가 무수히 많고 그 중 일부만 읽고 멈출 수 있을 때만 유용함. (2) Sort Group By 대체 region이 선두 컬럼인 결합 인덱스나 단일 컬럼 인덱스를 사용하면 Sort Group By 연산을 대체 할 수 있음. 'SORT GROUP BY NOSORT'라고 표시됨 (3) 인덱스를 활용한 Min, Max 구하기 인덱스가 항상 정렬 상태를 유지한다는 특징을 이용하여 Min, Max 값 추출 [주문일자 + 주문번호] 주의할 점 max 함수 내에서 인덱스 컬럼을 가공하면 인덱스를 사용하지 못하게 될 수 있다. [5] 소트 영역을 적게 사용하도록 SQL 작성 소트 연산이 불가피하다면 메모리

2023년 4월 30일
·
0개의 댓글
·
post-thumbnail

[SQLP]5장 고급 SQL 튜닝-2. 소트 튜닝(1)

[1] 소트와 성능 (1) 메모리 소트와 디스크 소트 1. 메모리 소트(In-Memory) Oracle은 소트 영역을 PGA 영역에 할당 SQL Server는 버퍼 캐시에 할당 전체 데이터의 정렬 작업을 할당받은 소트 영역 내에서 완료하는 것. 'Internal Sort' 또는 'Optimal Sort'라고도 함. 2. 디스크(To-Disk) 소트 소트 시 메모리 공간이 부족할 경우 디스크 공간을 사용 할당받은 소트 영역 내에서 정렬을 완료하지 못해 디스크 공간까지 사용하는 것. 'External Sort'라고도 함. 디스크 기록 횟수에 따른 분류 Onepass Sort : 정렬 대상 집합을 디스크에 한 번만 기록 Multipass Sort : 정렬 대상 집합을 디스크에 여러 번 기록 (2) 소트를 발생시키는 오퍼레이션 1. Sort Aggregate 전체 로우를 대상으로 집계를 수행

2023년 4월 30일
·
0개의 댓글
·
post-thumbnail

[SQLP]5장 고급 SQL 튜닝-1. 고급 SQL 활용(2)

[4] 페이징 처리 CASE문이나 DECODE 함수를 활용하는 기법은 IFELSE 같은 분기조건을 포함한 복잡한 처리절차를 One-SQL로 구현하는 데 반드시 필요하다. (1) 일반적인 페이징 처리용 SQL 관심 종목에 대해 사용자가 입력한 거래일시 이후 거래 데이터를 페이징 처리 방식으로 조회하는 SQL 첫 페이지만큼은 가장 최적의 수행 속도를 보인다. 대부분 업무에서 앞쪽 일부만 조회하므로 표준적인 페이징 처리 구현 패턴에 가장 적당하다. (1) : '다음' 페이지에 읽을 데이터가 더 있는지 확인하는 용도 CNT > :pgsize * :page => '다음' 페이지에 출력할 데이터가 더 있음. 필요하지 않으면 (3)번 라인에서 +1을 제거하면 됨. (2) : [종목코드 + 거래일시] 인덱스가 있으면 Sort 오퍼레이션 생략된다. 없더라도 TOP-N 쿼리 알고리즘 작동으로 SORT 부하 최소화 할 수 있

2023년 4월 29일
·
0개의 댓글
·
post-thumbnail

[SQLP]5장 고급 SQL 튜닝-1. 고급 SQL 활용(1)

[1] CASE문 활용 CASE문이나 DECODE 함수를 활용하는 기법은 IFELSE 같은 분기조건을 포함한 복잡한 처리절차를 One-SQL로 구현하는 데 반드시 필요하다. (1) CASE문 적용 왼쪽에 있는 월별납입방법별집계 테이블을 읽어 오른쪽 월요금납부실적과 같은 형태로 가공 CASE문 적용 전 One-SQL로 작성하는 자체가 중요한 것이 아니라 어떻게 I/O 효율을 달성할 지 중요하다. 동일 레코드를 반복 액세스하지 않고 얼마만큼 블록 액세스 양을 최소화할 수 있느냐에 달렸다. CASE문 적용 후 [2] 데이터 복제 기법 활용 CASE문이나 DECODE 함수를 활용하는 기법은 IFELSE 같은 분기조건을 포함한 복잡한 처리절차를 One-SQL로 구현

2023년 4월 28일
·
0개의 댓글
·
post-thumbnail

[SQLP]4장 인덱스와 조인-4. 고급 조인 기법

[1] 인라인 뷰 활용 1:M 관계인 테이블끼리의 조인 결과(1*M)를 1쪽 집합 단위로 그룹핑해야 할 때 M쪽 집합을 먼저 1쪽 단위로 그룹핑하고 나서 조인하는 방식 인라인 뷰 : M쪽 집합을 먼저 1쪽 단위로 그룹핑한 것 (1) 인라인뷰 적용 인라인뷰 적용 전 일별상품판매 테이블로부터 읽힌 365,000개 레코드마다 상품 테이블과 조인 시도 730,002개의 블록 I/O가 발생, 총 소요시간 13.8초 인라인뷰 적용 후 상품코드별로 먼저 집계한 결과건수가 1,000건이므로 상품 테이블과 조인도 1,000번만 발생 조인 과정에서 발생한 블록 I/O는 2,101개에 불과, 수행시간도 5.5초 [2] 배타적 관계의 조인 상호배타적(Exclusive OR) 관계 : 어떤 엔터티가 두 개 이상의 다른 엔터티의 합집합과 관계(Relationship) 갖는 것 ![](https://velog.velcdn.com/images/yo

2023년 4월 27일
·
0개의 댓글
·

[SQLP]4장 인덱스와 조인-3. 조인 기본 원리(3) Hash Join와 스칼라 서브쿼리(Scalar Subquery)

[3] Hash Join 둘 중 작은 집합(Build Input)을 읽어 해시 영역에 해시 테이블(= 해시 맵)을 생성하고, 반대쪽 큰 집합(Probe Input)을 읽어 해시 테이블을 탐색하면서 조인하는 방식 (1) 기본 메커니즘 해시 함수는, 출력값을 미리 알 순 없지만, 같은 입력값에 대해 같은 출력값을 보장하는 함수이다. 해시 충돌 : 다른 입력값에 대한 출력값이 같을 때 일어난다. 해시 테이블을 만들 때 해시 충돌이 발생하면, 입력값이 다른 엔트리가 한 해시 버킷에 담길 수 있다. (2) Hash Join 과정 1단계 : 해시 테이블 생성 두 집합 중 작다고 판단되는 집합을 읽어 해시 함수를 사용해 해시 테이블을 만든다. 해시 테이블은 해시 버킷으로 구성된 배열이다. 해시 함수에서 리턴받은 해시 값이 같은 데이터를 같은 해시 버킷에 체인(연결 리스트)으로 연결한다. 2단계 : Probe Input을 스캔 Pro

2023년 4월 26일
·
0개의 댓글
·

[SQLP]4장 인덱스와 조인-3. 조인 기본 원리(2) Sort Merge Join

[2] Sort Merge Join 두 테이블을 각각 정렬한 다음에 두 집합을 머지(Merge)하면서 조인을 수행한다. 실제 조인 수행 과정이 NL Join과 크게 다르지 않다. outer 집합과 inner 집합을 미리 정렬해 둔다는 점만 NL Join과 다르다. (1) Sort Merge Join을 사용하는 경우 조인 칼럼을 선두로 갖는 인덱스가 없어서 Outer 테이블에서 읽히는 건마다 Inner 테이블 전체를 스캔해야 할 때 (2) Sort Merge Join 과정 첫번째 , 소트 단계 양쪽 집합을 조인 칼럼 기준으로 정렬한다. 만약 조인 칼럼에 인덱스가 있으면(Oracle의 경우 Outer 테이블에만 해당) 소트 단계를 거치지 않고 곧바로 조인할 수

2023년 4월 26일
·
0개의 댓글
·
post-thumbnail

[SQLP]4장 인덱스와 조인-3. 조인 기본 원리(1) NL Join

[1] Nested Loop Join (1) 중첩 루프문 원리 (2) 오라클 사용예제 ordered : FROM 절에 나열된 테이블 순서대로 조인 use_nl(d) : NL(Nested Loop) JOIN을 이용하여 조인 d : EMP 테이블을 OUTER/DRIVING TABLE로 조인 (3) NL Join 수행 과정 분석 1. NL Join 수행 예제 사용되는 인덱스 : DEPTLOCIDX, EMPDEPTNOIDX 조건비교 순서 : ② → ③ → ① → ④ 조인 과정 1, 19, 31, 32 : 스캔할 데이터가 더 있는지 확인하는 one-plus 스캔 ※one-plus 스캔 : Non Unique Scan

2023년 4월 25일
·
0개의 댓글
·

[SQLP]4장 인덱스와 조인-2.인덱스 튜닝

[1] 인덱스 튜닝 (1) B*Tree 인덱스를 활용한 인덱스 튜닝 방법 아래 세 경우 모두 정상적인 인덱스 범위 스캔이 불가능할 따름이지 인덱스 사용 자체가 불가능하지는 않다. Index Full Scan은 가능하다. 1. 범위 스캔이 불가능하거나 인덱스 사용이 아예 불가능한 경우 인덱스 선두 칼럼을 조건절에서 가공하는 경우 (FBI 인덱스를 정의하지 않는 한) 묵시적 형변환 : 인덱스 칼럼을 사용자가 명시적으로 가공하지 않더라도 조건절에서 비교되는 두 값의 데이터 타입이 다르면 내부적으로 형변환 가급적 명시적으로 변환함수를 사용하는 것이 좋다. 문자형과 숫자형이 만나면 숫자형으로, 문자형과 날짜형이 만나면 날짜형으로 변환하는 등 데이터 타입간 우선순위가 존재한다. 성능을 위해서라면 인덱스 칼럼과 비교되는 반대쪽을 인덱스 칼럼 데이터 타입에 맞춰면 된다. 묵시적 형변환은 주로 성능 측면에서 언급되곤 하지만, 올바른 결과집합을 얻기 위해

2023년 4월 21일
·
0개의 댓글
·
post-thumbnail

[SQLP]4장 인덱스와 조인-1.인덱스 기본 원리

[1] 인덱스 구조 (1) 인덱스 탐색 1. 수직적 탐색 수평적 탐색을 위한 시작 지점을 찾는 과정 루트에서 리프 블록까지 아래쪽으로 진행 2.수평적 스캔 인덱스 리프 블록에 저장된 레코드끼리 연결된 순서에 따라 좌에서 우, 또는 우에서 좌로 스캔 [2] 다양한 인덱스 스캔방식 (1) Index Range Scan 인덱스 루트 블록에서 리프 블록까지 수직적으로 탐색한 후에 리프 블록을 필요한 범위(Range)만 스캔하는 방식 B*Tree 인덱스의 장 일반적이고 정상적인 형태의 액세스 방식 Index Range Scan 실행계획 (2) Index Full Scan 수직적 탐색없이 인덱스 리프 블록을 처음부터 끝까지 수평적으로 탐색하는 방식 대개는 데이터 검색을 위한 최적의 인덱스가 없을 때 차선으로 선택 Index Full Scan 실행계획 1. Index Full Scan의 효용성 인덱스 선두 칼럼

2023년 4월 20일
·
0개의 댓글
·
post-thumbnail

[SQLP]3장 옵티마이저 원리-2.쿼리변환

[1] 쿼리변환 (1) 쿼리변환이란? 옵티마이저가 SQL을 분석해 의미적으로 동일(결과가 동일)하면서도 더 나은 성능이 기대되는 형태로 SQL을 재작성하는 것 실행계획 생성/비용 산정 전에 SQL을 최적화에 유리한 형태로 재작성 옵티마이저의 sub엔진중에 하나인 Query Transformer가 담당 > #### ✅ 옵티마이저의 SQL 최적화 과정 (비용기반 옵티마이저 기준) > 1. Parser : SQL문장을 이루는 개별 구성요소를 분석하고 파싱해서 파싱 트리를 만든다. ( Syntax(문법), Semantic(의미) ) > 2. Query Transformer(옵티마이저) : 파싱된 SQL을 좀 더 일반적이고 표준적인 형태로 변환 > 3. Estimator(옵티마이저) : 오브젝트 및 시스템 통계정보를 이용해 쿼리 수행 각 단계의 선택도, 카디널리티, 비용을 계산하고, 궁극적으로는 실행계획 전체에 대한 총비용을 계산 > 4. Plan Generator

2023년 4월 19일
·
0개의 댓글
·