𝙎𝙌𝙇 (2)

2024. 8. 21. 16:52TIL

 

한 테이블에 많은 칼럼들이 존재할 경우 데이터가 물리적으로 저장되는 디스크 상에 넓게 분포할 가능성이 커지게 되어 디스크I/O가 대량으로 발생할 수 있고, 이로 인해 성능이 저하될 수 있다. 따라서 트랜잭션이 접근하는 칼럼유형을 분석해서 자주 접근하는 칼럼들과 상대적으로 접근 빈도가 낮은 칼럼들을 구분하여 1:1테이블로 분리하면 디스크I/O가 줄어들어 성능을 향상 시킬수 있다.

트랜잭션은 항상 전체를 통합하여 분석 처리하는데 슈퍼-서브타입이 하나의 테이블로 통합되어 있으면 하나의 테이블에 집적된 데이터만 읽어 처리할 수 있기 때문에 다른 형식에 비해 더 성능이 우수하다.(조인 감소)

 

데이터 조작어 (DML): SELECT,INSERT,UPDATE, DELETE

데이터 정의어 (DDL): CREATE, ALTER,DROP,RENAME

데이터 제어어(DCL): GRANT, REVOKE (DB에 접근하고 객체들을 상요하도록 권한을 주고 회수하는 명령어)

트랜잭션 제어어(TCL): COMMIT,ROLLBACK

 

PK는 NULL값을 가질수 없지만 FK는 NULL값을 가질수 있다.

 

Cascade: Master 삭제시 Child 같이 삭제

Set Null:Master 삭제시 Child 해당 필드 NULL

Set Default:Mster 삭제시 Child 해당 필드 Default 값으로 설정

Restrict: Child 테이블에 PK값이 없는 경우에만 Master 삭제 허용

No Action: 참조 무결성을 위반하는 삭제/수정 액션을 취하지 않음

 

Automatic: Master 테이블에 PK가 없는 경우 Master PK를 생성 후 Child 입력

Set Null:  Master 테이블에 PK가 없는 경우 Child 외부키를 NULL 값으로 처리

Set Default: Master 테이블에 PK가 없는 경우 Child 외부키를 Default 값으로 입력

Dependent: Master 테이블에 PK가 존재할 때만 Child 입력 허용

No Action: 참조 무결성을 위반하는 입력 액션을 취하지 않음

 

TRUNCATE,DROP을 상요하여 테이블의 데이터를 삭제하면 삭제 데이터에 대한 로그를 남기지 않는다.

TRUNCATE: 데이터를 모두 삭제, 테이블을 최초 생성된 초기상태로 만든다

DROP: 테이블 자체를 삭제

 

DB 트랜잭션에 대한 격리성이 낮은 경우 발생할 수 있는 문제점

Dirty Read: 다른 트랜잭션에 의해 수정되었지만 아직 커밋되지 않은 데이터를 읽는 것

Non-Repeat: 한 트랜잭션에서 같은 쿼리를 두번 수행하였는데, 그 사이에 다른 트랜잭션이 값을 수정 , 삭제를 함으로써  두 쿼리 결과가 다르게 나타나는 것

Phantom Read: 한 트랜잭션 내에서 같은 쿼리를 두번 수행하였는데 첫번째 쿼리에서 없던 유령 레코드가 두번쩨 쿼리에서 나타나는 것

 

NULL 값이 포함된 사칙연산의 결과는 무조건 NULL이다

 

단일행 함수: UPPER(),ROUND() 같이 각 값들에 대해 함수 적용

다중행 함수: SUM(),AVG() 같이 여러개의 값들을 하나의 결과값으로 나타내는 것

 

COALESCE: 첫번째로 NULL이 아닌 값을 반환하는 함수

SELECT문장의 실행순서

FROM->WHERE->GROUPBY->HAVING->SELECT->ORDERBY

 

DBMS 옵티마이저는 FROM절에 나열된 테이블이 아무리 많아도 항상 2개의 테이블씩 짝을 지어 JOIN을 수행한다.