SQL 8

SQL튜닝 입문 - NESTED LOOPS/SORT/MERGE/HASH

1. NESTED LOOPS JOIN- Driving Table: 옵티마이저가 결정 / outer table- Driven Table:Inner Table - 튜닝 포인트  1) 테이블 간 조인 횟수를 최소화 할 수 있도록 Driving Table을 선택 및 제어  2) Driven Table의 연결고리 칼럼에 대한 인덱스 구성2. NESTED LOOPS JOIN 장/단점1. 인덱스에 의한 랜덤 액세스에 기반하고 있어 대량의 데이터 처리 시 적합하지 않음2. Driving Table로는 테이블의 데이터가 적은 마스터 테이블이거나 where 절 조건으로 적절하게 row를 제어할 수 있어야 함.3. Driven Table에는 조인을 위한 적절한 인덱스가 있어야 함3. 조인 순서 제어 방법- 조인 순서 제어를..

프로그래밍 2025.01.19

SQL튜닝 입문 - INDEX 활용 불가능 케이스

1. 인덱스 사용하면 안되는 경우- 조건에 의한 처리 범위가 넓어짐으로써 분포도가 나빠지는 경우, 이 때 인덱스 스캔보다 FULL TABLE SCAN을 하는 것이 낫다 →FULL TABLE SCAN할 경우, 한 번의 I/O 때 마다 여러 개의 데이터 블록을 처리하기 때문에 I/O횟수가 감소함2. 인덱스 사용 불가능한 경우1) NOT 연산자 사용SELECT *FROM EMPWHERE EMPNO != '1234';SELECT *FROM EMPWHERE EMPNO '1234'; 2) IS NULL, IS NOT NULL 사용SELECT *FROM EMPWHERE EMPNO IS NULL; 3) 옵티마이저 취사 선택옵티마이저의 자의적 판단에 의해서 인덱스를 사용할 수도 있고, 사용하지 않을 수 있는 경우> 옵..

프로그래밍 2025.01.12

SQL튜닝 입문 - INDEX, 결합INDEX

1. 필요성- 일반적으로 테이블의 전체 데이터 중에서 10~15% 이하의 데이터를 처리하는 경우에 효율적2. B* TREE 구조- 가장 많이 사용되는 인덱스 구조, 데이터 저장 방식- ROOT/BRANCH/LEAF NODE 구성- BRANCH NODE: 조회하려는 값이 있는 LEAF 노드까지 도달하기 위해 비교/분기해야 될 값들이 저장됨LEAF NODE = 인덱스 칼럼의 값 + ROWID(저장위치정보) - ORDER BY에 의한 SORT를 피할 수 있음- MAX/MIN의 효율적 처리가 가능3. 인덱스 선정 절차1) 프로그램 개발에 이용된 모든 테이블에 대하여 Access Path 조사2) 인덱스 칼럼 선정 및 분포도 조사3) Critical Access Path 결정 및 우선순위 선정4) 인덱스 칼럼의 ..

프로그래밍 2025.01.12

SQL튜닝 입문 - 실행계획, 옵티마이저

1. 실행계획 정의사용자가 SQL을 실행하여 추출하려고 할 때, 옵티마이저가 수립하는 작업 절차- OPTIMZER: SQL 해석 -> 실행계획 수립 -> 실행 2. 실행계획 확인 방법1) EXPLAIN PLAN- SQL에 대한 실행계획만 확인 가능- 명령 사용 시 데이터 처리 X -> 이로 인한 부하가 없음, IO 관련 정보를 확인할 수 없음EXPLAIN PLANSET STATEMENT_ID = 'TEMP1' INTO PLAN_TABLEFOR/* SELECT 구문*/SELECT *FROM EMPWHERE DEPT_ID LIKE '%시스템'; - PLAN_TABLE에 저장된 결과를 확인해야 한다.SELECT *FROM TABLE(DBMS_XPLAN.DISPLAY('PLAN_TABLE', 'TEMP1', '..

프로그래밍 2025.01.12

Oracle PL/SQL - Record

* 레코드를 사용하면 데이터 타입이나 길이가 다른 여러 변수들을 논리적으로 하나의 그룹으로 묶을 수 있다. 1. 선언 TYPE 타입명 IS RECORD 필드목록; 레코드변수명 타입명; 필드목록은 레코드의 필드 목록을 선언하는 부분으로, 형식은 CREATE TABLE문의 칼럼 선언가 유사한 형태를 가진다. (예시) DECLARE TYPE emp_type IS RECORD( empno NUMBER(4) NOT NULL := 0, ename emp.ename%TYPE, job VARCHAR2(9) ); v_emp emp_type; BEGIN v_emp.empno := 9000; v_emp.ename := '홍길동'; v_emp.job := '의적'; DBMS_OUTPUT.PUT_LINE('EMPNO = '||..

프로그래밍 2021.09.23

Oracle PL/SQL - Collection

※ Oracle PL/SQL은 컴포지트 데이터 타입으로 컬렉션과 레코드를 지원한다. - 컬렉션(Collection): 동일 타입 데이터의 반복 - 레코드(Record): 서로 다른 타입의 데이터 모음 1. 컬렉션 타입의 종류 Associative Array VARRAY Nested Table 컬렉션 항목의 개수 미지정 지정 미지정 인덱스 유형 문자열 또는 정수 정수 정수 초기화되지 않은 상태 Empty NULL NULL ADT(Abstract Data Type) 정의 불가능 가능 가능 - VARRAY, Nested Table 컬렉션 변수는 사용하기 전에 반드시 초기화해야 한다. * 컬렉션 타입과 대응되는 일반 자료 구조 일반 자료 구조 PL/SQL 컬렉션 타입 해시 테이블, 비순서 테이블 Associat..

프로그래밍 2021.09.23

[MySQL] With Recursive 문, 세션 변수 활용, Pagination

1. 기본 테이블 형태 select * from employee; 2. Employee 테이블에서 직원 번호, 직원 이름과 직원의 상사 번호와 상사 이름을 출력 * With 절을 사용하지 않은 쿼리 select b.empno, b.ename, b.mgr, a.ename from employee a right outer join employee b on a.empno = b.mgr; * With 절(임시 테이블) with t1 as (select empno, ename, mgr from employee), t2 as (select empno, ename from employee) select t1.empno, t1.ename, t1.mgr, t2.ename from t1 left outer join t2 ..

프로그래밍 2021.07.06

[SQLD] SQLD 자격증 취득 후기

* 시험일: 2021년 3월 20일 10시 * 공부기간: 약 3주(2주 이론 공부(약 4일 '데이터 모델링의 이해', 약 10일 'SQL 기본 및 활용'), 1주 모의고사, 기출문제, 오답노트) * 후기 비교적 가장 최근에 취득한 자격증 후기를 작성해보고자 한다! 공부하면서 많은(?) 분노를 느꼈기 때문에 가장 먼저 쓰는 중이다. SQLD는 2번 시험을 봤는데, 1번은 2019년 학교를 다니며 데이터베이스 수업을 수강할 때 봤었다. 중간고사와 날짜가 겹치며 공부를 제대로 하지 못해 50점으로 불합격했었고, 취업을 준비하며 취득할 필요성을 느껴 재도전해서 82점으로 합격했다. - 활용서적 [ SQL 개발자 이론서+기출문제 ] 저자: 임호진, 박종범, 강성권, 임준혁 출판: 영진닷컴 발매: 2020년 9월 ..

자격증 2021.05.06