Skip to content

Latest commit

 

History

History
90 lines (63 loc) · 5.25 KB

데이터베이스.md

File metadata and controls

90 lines (63 loc) · 5.25 KB

인덱스

  1. DB 인덱스 , 인덱스 거는이유, 인덱스에 왜 해쉬 보다 B Tree를 쓰는지?
  • 인덱스는 전체 테이블을 스캔하지 않고, 인덱스를 지정한 컬럼을 우선순위로 하여 조회할 수 있도록 지원하는 도구라고 할 수 있다. 인덱스는 많은 데이터에 대해서 조회와 같은 일련의 쿼리 연산 작업을 실행할 때, 발생할 수 있는 부하증가를 해결하기 위해서 사용한다. B-Tree 인덱스 알고리즘은 컬럼의 값을 변경하지 않고 원래의 값을 갖고 인덱싱하는 알고리즘이다. 해쉬 알고리즘은 해시 테이블 구조처럼 주소값을 저장해둔 후 값을 가져오는 방식이다. 그런데 이러한 해시 알고리즘은 select 조회시 부등호 조건 사용시 문제가 발생할 수 있기 때문에 B Tree 알고리즘을 보통 많이 사용한다.

트랜잭션

  1. 트랜잭션이란 무엇인지 설명해보시오
  • 트랜잭션은 데이터베이스 관리 시스템에서 발생하는 상호작용의 최소 단위를 의미한다. 트랜잭션은 원자성, 일관성, 고립성, 지속성의 네 가지 특성을 갖는다. 원자성은 데이터 조작이 성공과 실패 두 가지 상태로 구별된다는 점을 의미한다. 일관성은 데이터 조작 전후 일관성을 유지할 필요가 있다는 점을 의미한다. 고립성은 많은 사용자가 동시에 데이터 조작을 하는 경우, 요청 처리가 모순없이 실행되어야 한다는 것을 의미한다. 지속성은 데이터 조작 완료 후 통지를 받는 시점에서 결과를 잃지 않는 것을 의미한다.

락의 개념과 데드락

  1. 락, 교착상태에 대해서 설명하시오.
  • 락은 데이터를 수정중이라는 상태를 알리는 잠금장치와 같다. 락은 크게 공유락과 배타락으로 분류되는데, 공유락은 트랜잭션이 읽기를 할 때 사용하는 락이고, 배타락은 트랜잭션이 읽고 쓰기를 할 때 사용하는 락이다. 이러한 락에 대해서 교착 상태, 즉 데드락이 발생할 수 있는 경우가 있다. 이 상황은 두 개 이상의 트랜잭션이 동일 자원에 대해서 접근을 하는 과정에서 각각 락을 갖고 있는 상태에서 상대방 데이터에 대해서 락을 요청했을 때 발생할 수 있다(점유와 대기). 이러한 교착상태는 상호 배제, 점유와 대기, 비선점, 환형대기와 같은 4가지 조건을 모두 만족하면 발생할 수 있다. 그리고 교착상태는 예방과 회피, 회복, 무시로 해결할 수 있다.

조인

  1. 등가조인=내부조인(inner join)
  • 등가조인은 교집합의 개념으로 접근하면 이해하기 쉽습니다. 즉, 두 엔티티의 공통부분을 합하는 것입니다.
SELECT E.EMPNO, E.ENAME, D.DEPTNO, D.DNAME,D.LOC FROM EMP E, DEPT D WHERE E.DEPTNO=D.DEPTNO ORDER BY D.DEPTNO, E.EMPNO;
  1. 비등가조인
  • BETWEEN A AND B를 활용하는 방식이 대표적인 등가조인 외의 방식 중 하나이다.
--ORACLE-- 
SELECT * FROM EMP E, SALGRADE S WHERE E.SAL BETWEEN S.LOSAL AND S.HISAL;
  1. 셀프조인
  • 한 테이블 내에서 다른 컬럼에서 하나의 컬럼을 참조해야 할 때, 연결해주는 개념이다.
--ORACLE-- 
SELECT A1.컬럼1, A1.참조될 컬럼명, A2.참조할 컬럼명 FROM 테이블 A1, 테이블 A2 WHERE A1.참조될 컬럼명=A2.참조할 컬럼명; --ANSI-- SELECT A1.컬럼1, A1.참조될 컬럼명, A2.참조할 컬럼 FROM 테이블 A1 JOIN 테이블 A2 ON(A1.참조될 컬럼명=A2.참조할 컬럼명);
  1. Left Outer Join

  • 왼쪽 외부 조인은 두 집합 중 왼쪽 집합만을 나타내는 개념이라고 생각하면 된다. 이 때, 오른쪽 테이블 내용이 겹쳐지는 것이 없다면 null로 채우면 된다.
--ORACLE--
SELECT EMPNO, ENAME, E.DEPTNO, D.DNAME
FROM EMP E, DEPT D
WHERE E.DEPTNO=D.DEPTNO(+);

--ANSI
SELECT EMPNO, ENAME, E.DEPTNO, D.DNAME
FROM EMP E
LEFT JOIN DEPT D ON(E.DEPTNO=D.DEPTNO);
  1. 오른쪽 외부 조인 Right Outer Join

  • 오른쪽 외부 조인은 두 테이블에 대해서 오른쪽 테이블만을 나타내는 경우라고 보면 이해하기 쉽다. 이 때, 왼쪽 테이블에 대해서 겹쳐지는 부분이 없다면 그부분은 null로 두게 된다.
	--ORACLE--
SELECT EMPNO, ENAME, E.DEPTNO, D.DNAME
FROM EMP E, DEPT D
WHERE E.DEPTNO(+)=D.DEPTNO;

--ANSI
SELECT EMPNO, ENAME, E.DEPTNO, D.DNAME
FROM EMP E
RIGHT JOIN DEPT D ON(E.DEPTNO=D.DEPTNO);
  1. 전체 외부 조인 Full Outer Join

  • 전체 외부 조인은 두 테이블에 대한 합집합이라고 생각하면 이해하기 쉽다. 다만 해당 방식은 오라클에서 지원되지 않고, ANSI 방식에서는 지원되고 있다
SELECT E.EMPNO, E.ENAME, E.JOB, E.MGR,
            E.HIREDATE, E.SAL, E.COMM,
            DEPTNO, D.DNAME, D.LOC
FROM EMP E FULL JOIN DEPT D USING(DEPTNO);