Kosta 클라우드 네이티브 어플리케이션 개발(CNA) 교육

Kosta 클라우드 네이티브 애플리케이션 개발 (CNA) 교육 5일차

youngbee 2024. 11. 21. 22:00

SQL 튜닝

  • SELECT * 대신 필요한 필드만 지정하여 조회합니다. 불필요한 데이터 검색을 줄여 성능을 향상시킵니다.
  • DISTINCT 사용을 피합니다. GROUP BY를 사용하는 것이 더 효율적일 수 있습니다.
  • 서브쿼리 대신 JOIN을 사용합니다. 서브쿼리는 행마다 실행되어 성능이 저하될 수 있습니다.
  • WHERE 절에서 와일드카드 사용을 최소화합니다. 인덱스 사용을 방해할 수 있기 때문입니다.

Index

  • rowid,pk를 가지고 있음
  • rowid, pk 를 가지고 메모리 버퍼에 올린 다음 search 후 테이블에서 검색 추출 → BTree 사용
  • Index는 수정이 빈번한 것에는 사용 X
  • 분포도가 좋은 데이터에만 사용
  • Index를 순서대로 사용해야 한다
  • 결과가 구간적(between A and B)는 인덱스 사용 X
  • CREATE INDEX 인덱스명 ON 테이블명(컬럼명1, 컬럼명2...);

작업결과 확인

  • ID : 작업 고유 식별자
  • PARENT_ID : 상위 작업ID
  • DEPTH : 트리 깊이
  • POSITION : 동일 부모 작업에서의 작업 순서

<실행순서>

  • depth desc : 트리 아래에서 위로
  • PARENT_ID asc : 동일한 부모작업들 부터
  • POSITION asc : 좌에서 우로

ACCESS_PREDICATES → 메모리 핸들링

FILTER_PREDICATES → 테이블 핸들링

경과 시간 측정

SET TIMING ON
(쿼리)
SET TIMING OFF

STATEMENT

  • 사용되는 자원 측정 가능
  • explain plan set STATEMENT_ID='ID이름' for select e.empno, e.ename, e.job, e.sal, d.dname from (select empno, ename, job, sal, deptno from emp where deptno=10) e , dept d where e.deptno = d.deptno; ----------------------------- select * from plan_table; select * from PLAN_TABLE; select STATEMENT_ID, OPERATION, OBJECT_TYPE, OBJECT_NAME , '----' , ID,PARENT_ID,DEPTH,POSITION, '----' , COST,CARDINALITY, BYTES ,CPU_COST, IO_COST , '----' , ACCESS_PREDICATES, FILTER_PREDICATES from PLAN_TABLE where STATEMENT_ID in ('test3', 'test6') order by STATEMENT_ID asc, depth desc, PARENT_ID asc, POSITION asc;

View

  • View 에 수정, 삭제를 하면 원본 테이블에도 적용이 된다

View의 장점

  • 데이터 접근 제어: 특정 컬럼만 노출하여 보안 강화
  • 복잡한 쿼리 단순화: 자주 사용되는 복잡한 쿼리를 간단히 호출 가능
  • 데이터 일관성: 여러 애플리케이션에서 동일한 데이터 뷰 사용 가능

View 수정 및 삭제

  • 수정: CREATE OR REPLACE VIEW 구문 사용
  • 삭제: DROP VIEW view_name; 구문 사용

View 생성

create view MY_TABLE2 as
    select empno, ename from emp;

View 수정

create or replace view MY_TABLE2 as
    select empno, ename , job from emp;

Inline View

  • Inline view는 FROM 절 내에 작성된 서브쿼리로, 마치 테이블처럼 취급됩니다.
  • 용도
    • 복잡한 쿼리를 단순화
    • 여러 개의 쿼리를 하나로 결합
    • 조인 연산을 제거하여 쿼리 최적화
    • 사용자의 조건절을 where에서 사용하고 싶을 때
    SELECT column_list
    FROM (SELECT ... FROM table_name) [alias]
    WHERE 조건식;
    

Sequence

  • 중복없는 순서 PK
CREATE SEQUENCE sequence_name
[START WITH n]
[INCREMENT BY n]
[MAXVALUE n | NOMAXVALUE]
[MINVALUE n | NOMINVALUE]
[CYCLE | NOCYCLE]
[CACHE n | NOCACHE];

피벗 : 가로행과 세로 행을 바꾼다

  • DECODE (A, B, X, Y)
    • A = B면 X를 출력 A ≠ B면 Y를 출력