일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- database
- 친절한SQL튜닝
- intellij
- db
- 오라클
- table full scan
- RAC
- 오라클튜닝
- Oracle
- 클린 코드
- B*Tree
- join
- 클린코드
- 조인
- SQLD
- B*Tree인덱스
- clean code
- SQLP
- 알고리즘
- B*Tree인덱스구조
- 로버트C마틴
- 파이썬
- 데이터모델링
- heapq
- 리트코드215
- index fast full scan
- SQL튜닝의시작
- leetcode215
- 결합인덱스구조
- 리눅스
- Today
- Total
목록Oracle (12)
개발노트
테이블에서 데이터를 찾는 방식 2가지1. 테이블 전체를 스캔 2. 인덱스를 이용 인덱스는 큰 테이블에서 소량 데이터를 검색할 때 사용한다. 그래서 온라인 트랜잭션 처리(Online Transaction Process, OLTP) 시스템에서는 소량 데이터를 주로 검색하므로 인덱스 튜닝이 무엇보다 중요하다. 인덱스란대용량 테이블에서 필요한 소량의 데이터만 빠르게 효율적으로 액세스하기 위해 사용하는 오브젝트다. DBMS 는 일반적으로 B*Tree(Balanced Tree) 인덱스를 사용한다. B*Tree 구조를 가지는 인덱스 구조 B*Tree 구조는 루트 블록, 브랜치 블록, 리프 블록으로 구성되어 있다. 루트와 브랜치 블록에 있는 각 레코드는 하위 블록에 대한 주소값을 가지고 있다. 키값은 하위 블록에 저장..
1) system 계정으로 접속 sqlplus C:\WINDOWS\system32>sqlplus 2) 관리자 권한 접속 SQL> conn/as sysdba 3) 계정 생성 CREATE USER [ID] IDENTIFIED BY [PW] create user sampleid identified by 1234; 4) 권한 부여 계정을 생성한 후 권한을 부여하지 않으면 접속 조차 안된다 CONNECT : DB 접속 권한 RESOURCE : 객체 및 데이터 조작 권한 GRANT [Roles] TO [ID] grant connect, resource, dba to sampleid; 5) 계정생성 확인 select * from all_users;
ROWNUM 이란? ROWNUM 은 Oracle 에서 제공하는 가상 컬럼이다. Select 절에서 사용할 경우, 추출하는 데이터의 순번을 부여하는 용도로 사용된다. Where 절에서 사용할 경우, 추출할 데이터 중 일부만 가져올 용도로 사용된다. 특히, where 절에 사용되는 ROWNUM은 인덱스의 특성을 이용하여 부분범위 처리로 유도할 수 있어 잘 사용하면 효율적인 SQL이 된다. ROWNUM 사용시 주의 사항 ROWNUM 데이터를 먼저 추출한 이후 조회하자 ROWNUM 은 SQL 결과 셋에 순번을 1부터 부여하는 가상컬럼으로써, Fetch 단계에서 추출하는 첫 번째 로우에 1을 부여한다. 그리고 다음 로우 추출시 ROWNUM을 +1 한다. 따라서 1이 존재하지 않으면 다음 순번을 부여할 수가 없다...
WITH절 설명 & 사용법 정의 WITH절은 오라클9 버전부터 사용되었고, 이름이 부여된 임시 서브쿼리라고 생각하면 된다. 임시 테이블을 만든다는 관점에서 보면 VIEW 와 쓰임새가 비슷하다. 그러나 차이가 있다면 VIEW 는 DROP 되지 않는 한 재사용이 가능한 Object 이지만, WITH절의 경우 실행되는 쿼리문 안에서만 재사용된다. 사용법 예시 WITH cte1 AS (SELECT a, b FROM table1), cte2 AS (SELECT c, d FROM table2) SELECT b, d FROM cte1 JOIN cte2 WHERE cte1.a = cte2.c; - 서브쿼리를 AS 뒤에 괄호에 넣고, AS 앞에 서브쿼리에 대한 이름을 붙여준다. - WITH 절로 생성된 서브쿼리는 tab..
커서(Cursor) Cursor 는 Oracle 서버에서 할당한 전용 메모리 영역에 대한 포인터이다. 질의의 결과로 얻어진 여러 행이 저장된 메모리상의 위치(포인터) 값이다. 커서는 Select 문의 결과 집합을 처리할 때 사용한다. 암시적 커서(Implicit Cursor) 오라클 DB에서 실행되는 모든 SQL문장은 암시적인 커서가 생성되며, 커서 속성을 사용할 수 있다. 모든 DML과 PL/SQL SELECT 문에 대해 선언된다. 암시적인 커서는 오라클이나 PL/SQL 실행 매커니즘에 의해 처리되는 SQL 문장이 처리되는 곳에 대한 익명의 주소이다. Oracle 서버에서 SQL 문을 처리하기 위해 내부적으로 생성/관리한다. 암시적 커서는 SQL문이 실행되는 순간 자동으로 Open 과 Close 를 실..
일반적인 조인 메서드 선택 기준 1) 소량 데이터 조인 → nl 조인 2) 대량 데이터 조인 → 해시 조인 3) 대량 데이터 조인인데 해시 조인으로 처리 불가할 때 → 소트 머지 조인 ** 조인 조건식이 등치(=)가 아니거나, 카테시안 곱일 때 수행빈도가 매우 높은 쿼리에 대한 조인 메서드 선택 기준 1) (최적화된) nl 조인과 해시 조인 성능이 같다면 → nl 조인 2) 해시 조인이 약간 더 빠르면 → nl 조인 => 수행빈도가 높은 소량 데이터 조인은 설령 해시 조인이 약간 더 빠르더라도 nl 조인을 선택하라 3) nl 조인보다 해시조인이 매우 빠르면 → 해시 조인 nl 조인을 가장 먼저 고려해야 하는 이유는? nl 조인에서 사용하는 인덱스는 공유 및 재사용하는 자료구조다. 반면, 해시테이블은 단 ..
기본 메커니즘 1. build 단계 : 작은 쪽 테이블(build input)을 읽어 해시 테이블(해시 맵)을 생성한다. 2. probe 단계 : 큰 쪽 테이블(probe input)을 읽어 해시 테이블을 탐색하면서 조인한다. * use_hash 힌트로 해시조인을 유도한다. SQL 수행과정 SELECT /*+ ordered use_hash(E) */ E.EMPNO, E.ENAME, E.SAL, D.DNAME FROM DEPT D INNER JOIN EMP E ON D.DEPTNO = E.DEPTNO AND E.SAL > 1500 AND E.JOB = 'SALESMAN' WHERE D.DNAME = 'SALES' ; Execution plan -----------------------------------..
PGA 오라클 서버 프로세스는 SGA 에 공유된 데이터를 읽고 쓰면서, 동시에 자신만의 고유 메모리 영역 PGA 를 갖는다. PGA 는 프로세스에 종속적인 고유 데이터를 저장하는 용도로 사용한다. 할당받은 PGA 공간이 작아 데이터를 모두 저장할 수 없을 때는 Temp 테이블스페이스를 이용한다. * temp tbs 는 물리적 disk 형태로 존재한다. PGA 는 다른 프로세스와 공유하지 않는 메모리 공간으로, 래치 메커니즘이 불필요하다. → 같은 양의 데이터를 읽더라도 SGA 버퍼캐시에서 읽을 때보다 훨씬 빠르다. Sort Merge Join 기본 메커니즘 이름이 의미하는 것처럼 2단계로 진행한다. 1. 소트 단계 : 양쪽 집합을 조인 컬럼 기준으로 정렬한다. 2. 머지 단계 : 정렬한 양쪽 집합을 서로..