TIL-210813

박건희·2021년 8월 15일
0

keyword : Transaction, Auto Commit, View, Stored Procedure, Trigger, 성능 튜닝 - Explain, Index

1. Transaction

  • Transaction이란
    • Atomic하게 실행되어야 하는 SQL을 묶어서 하나의 작업처럼 처리하는 방법
    • DDL/DML 중 레코드를 추가/수정/삭제한 것에만 의미가 있음
    • 사용 예시) 계좌이체 : 인출 - 입금 과정은 atomic해야됨(두 작업이 순서대로 모두 완료되어야 함)
      TRANSACTION과 ROLLBACK은 autocommit mode에 따라 다름

2. View

  • 자주 사용하는 SQL쿼리(SELECT)를 VIEW로 등록하여 이미 있는 TABLE처럼 사용하는 기능.

3. Stored Procedure

  • MySQL 서버단에 저장되는 SQL 쿼리들
  • view와 다른점
    • view의 결과 : 정의한 SQL 쿼리의 결과(레코드들의 집합)
    • Stored Procedure의 결과 : IN parameter에 따라 다른 결과를 반환, (IN)OUT parameter에 쿼리의 결과값 저장 가능.
    • MySQL에서 변수는 SET @변수 = 초기값
    • 변수 조회는 SELECT @변수

4. Stored Function

  • Scalar 1개를 리턴하는 서버단의 함수 (Stored Procedure는 레코드 / 값 - parameter로 반환)
  • 특정 데이터베이스 밑에 등록됨
  • 입력에 대한 출력(리턴)의 일관성 (Deterministic / Non Deterministic)
  • 모든 함수의 인자는 IN parameter
  • SQL 안에서 호출 가능 ( MAX, MIN 같이)

5. Trigger

  • TABLE에 INSERT/DELETE/UPDATE 실행 전후에(BEFORE/AFTER) 특정 작업을 수행하게 함.
  • NEW, OLD modifier로 operation 후/전의 field에 접근 가능.
    데이터 백업/변경된 내용을 다른 TABLE에 저장 가능.

6. Explain

  • (복잡하고 긴) query의 실행 속도가 느릴 때, 내부 동작을 분석하는데 사용.
  • 분석후 문제가 되는 테이블에 index를 붙여서 해결하는 것이 일반적.

7. Index

  • B+ Tree 자료구조를 이용해서 검색을 빠르게 할 수 있도록 하는 기능.
  • Primary/Foriegn Key를 제외한 column에 column별로 지정가능.
  • SELECT/DELETE/JOIN 명령은 빠르게 하지만, INSERT/UPDATE 명령은 느리게 함.
  • 추가적인 자료구조를 사용하기 때문에 INDEX 로딩으로 인한 오버헤드로 인해 시스템이 느려질 수 있다.
  • TABLE의 크기가 클 때(ex.100만 이상) INDEX 사용의 이득을 볼 수 있음.

느낀점

RDB는 product 개발과 서비스에 필수적인 요소이니 그 특성을 파악하고 SQL을 능숙하게 사용하고 싶다.
경험이 쌓이면 product나 service의 성격에 따라 적절한 DB를 선택하고 성능 issue가 발생하면 분석하여 해결할 수 있는 개발자가 되고싶다.
RDB는 scaling에 제약이 있으므로 꼭 필요한 데이터만 저장하자.

0개의 댓글