IT/SQL

    [ORACLE] 인덱스(INDEX) 구조

    [ORACLE] 인덱스(INDEX) 구조

    INDEX 구조 Balance*Tree node root: 트리의 시작점 branch : leaf 노드의 위치와 저장된 값의 범위를 저장 leaf 데이터 저장 탐색 root에서 leaf node까지 depth가균일한트리 leaf node에 저장되는 데이터를 탐색시 모든 데이터에 접근속도가 비슷 정렬이 되어있기 때문에 원하는 데이터의 위치를 빠르게 접근 인덱스 접근, 인덱스를 통한 테이블 접근은 모두 Single block I/O DBMS에서는 한행을 읽어도 해당 행이 속한 block 전체를 조회 인덱스를 통해 대량의 데이터를 Single block I/O가 발생하면 전체 읽기(Multiblock I/O) 보다 성능이 느릴 수 있다 INDEX를 활용하지 못하는경우 컬럼(좌변)을 가공 부정형 연산 ( !=,..

    [ORACLE]실행계획

    [ORACLE]실행계획

    실행계획 오라클서버가 항상최적의 실행계획을 선택하지 않을 수도 있다 (응답성 중요 : OLTP - Online Transection processing) 전체 쿼리 시간 중요 (은행이자) : OLAP - Online Analytical processing ⇒ 실행계획을 세우는 시간이 30분이상 걸리기도함 항상 실행계획을 세우지 않음 만약 동일한 SQL이 이미 실행된적이 있으면 해당 SQL의 실행계획을 새롭게 세우지 않고 Shared pool(메모리)에 존재하는 실행계획을 재사용 동일한 SQL : 문자가 완벽하게 동일한 sql / SQL의 실행결과가 같다고해서 동일한 SQL이 아님(대소문자, 공백도 가림) 바인드 변수를 쓰는 이유?이기도 함 system에서 실행했던 SQL 조회 -- system SELEC..

    [ORACLE]PL/SQL

    PL/SQL 💡 Procedural Language / SQL 집합적 성향이 강한 SQL에 일반 프로그래밍 언어 요소를 추가 기본 구조 선언부(Declare) 변수, 상수 선언 생략가능 실행부(Begin) 제어문, 반복문 등 로직 실행 예외처리부(Exception) 실행도중 에러 발생을 catch, 후속조치 생략가능 연산자 := 대입연산자 ** 제곱연산자 변수 변수 일반타입 var VarTYPE( ); 변수 참조 타입 💡 변수 타입을 특정 테이블의 컬럼을 지칭할 수 있다 유지보수 용이 table.column%TYPE ; DECLARE deptno dept.deptno%TYPE; dname dept.dname%TYPE; ⭕복합변수 ROWTYPE 💡 특정 테이블의 행의 모든 컬럼을 담을 수 있는 행 참조변수..

    [ORACLE] Window 함수, 분석함수

    [ORACLE] Window 함수, 분석함수

    6. 분석함수(윈도우함수) 💡 윈도우 함수를 사용하면 행간 연산이 가능해짐 ⇒ 일반적으로 풀리지 않는 쿼리를 간단하게 만들수 있다. ⭐ 모든 DBMS가 윈도우 함수를 지원하진 않음 ‼️ SELECT window_function(arg) OVER ([PARTITION BY columns] [ORDER BY columns] [WINDOWING]) PARTITION BY 컬럼코드 (GROUP BY) : 행들을 묶을 그룹 ORDER BY 컬럼코드 [DESC | ASC] : 묶여진 행들간의 순서 (WINDOWING) : 파티션안에서 특정 행들에 대해서만 연산을 하고 싶을때 범위 지정 순위 관련 함수 RANK() 💡 동일값에 대해서 동일순위 부여 →1등 2명 그 다음 3 DENSE_RANK() 💡 동일값에 대해서 ..

    [ORACLE]계층쿼리

    [ORACLE]계층쿼리

    5. 계층쿼리 CONNECT BY LEVEL 💡 행을 열로 바꾸는 쿼리 CONNECT BY LEVEL

    [ORACLE]Subquery Advanced

    4. Subquery Advanced UPDATE 💡 update 절에 Subquery를 이용해서 업데이트 가능하다 UPDATE emp_test SET dname = (SELECT dname FROM dept WHERE dept.deptno = emp_test.deptno); UPDATE dept_test SET empcnt = (SELECT count(*) FROM emp WHERE deptno = dept_test.deptno); DELETE 💡 DELETE 절에 Subquery를 이용해서 삭제 가능하다 DELETE FROM dept_test WHERE deptno NOT IN(SELECT deptno FROM emp GROUP BY deptno); DELETE FROM dept_test WHERE ..

    [ORACLE]Group function

    [ORACLE]Group function

    3. Group function ROLLUP , GROUPING SETS, CUBE ROLLUP 그룹별, 전체 행을 합하는 쿼리(비효율) --비효율적 SELECT deptno, SUM(sal) FROM emp GROUP BY deptno UNION SELECT null deptno, SUM(sal) FROM emp; --- emp 테이블 한번만쓰고 출력하기 SELECT DECODE(rn, 1, deptno, 2, null) deptno, SUM(sum_sal) FROM (SELECT deptno, SUM(sal) sum_sal FROM emp GROUP BY deptno) a, (SELECT ROWNUM rn FROM dept WHERE ROWNUM

    [ORACLE]Merge⭐

    💡 사용자로부터 받은 값을 가지고 데이터 유무에 따라 저장 or 수정 테이블의 데이터를 이용하여 다른 테이블의 데이터를 저장 or 수정 MERGE INTO table_name alias USING (table | view | sub_query) alias ON ( 테이블간 조건 ) WHEN MATCHED THEN UPDATE SET col = value [, col = value ...] WHEN NOT MATCHED THEN INSERT (col [, col ... ] ) VALUES ( value [ , value ...]) ; -- 테이블의 데이터 기준 MERGE INTO emp_test a USING emp b ON (a.empno = b.empno) WHEN MATCHED THEN UPDATE ..

    [ORACLE]Multiple Insert

    💡 한번에 여러 테이블에 데이터를 입력 INSERT [ALL] [conditional_insert_clause] [INSERT INTO ...] SUBQUERY conditional_insert_clause [ALL | FIRST] [WHEN condition THEN insert_into_clasue VALUE clause] [ELSE] [insert_into_clasue] 많이 쓰지 않는다 실 사용 예 데이터 백업 데이터의 수평분할 ex ) 년도별로 주문테이블 관리 ( 2020, 2021 ) ⇒ 오라클의 PARTITION 을 통해 더 효과적으로 관리 가능(정식 버전) 하나의 테이블 안에 데이터 값에 따라 저장하는 물리공간이 별도로 나눠져있음 개발자 입장에서 데이터를 입력하면 데이터 값에 따라 물리적인..

    [ORACLE]트랜잭션 (Transaction)

    [ORACLE]트랜잭션 (Transaction)

    트랜잭션(TRANSACTION) 💡 여러 과정을 하나의 단위로 묶는 행위 논리적인 일의 단위 첫번째 DML을 실행함과동시에 트랜잭션 시작 ex) 게시글입력시 ( 제목, 내용 ,복수개의 첨부파일) TABLE : 게시글 테이블 / 첨부파일 테이블 DML : 게시글입력 DML : 게시글 첨부파일 입력 만약 1번실행후에 2번이 에러가나면? DDL / DCL → 자동으로 commit(묵시적 commit /rollback 불가) COMMIT 💡 트랜잭션 종료, 데이터를 확정 COMMIT; ROLLBACK 💡 트랜젝션을 실행한 DML을 취소하고 트랜잭션 종료 ROLLBACK; 읽기 일관성 (ISOLATE LEVEL) 💡 트랜잭션의 실행결과가 다른 트랜잭션에 어떻게 영향을 미치는지 정의 ORACLE : LV 0 ~ 3..