RDBMS
1. Oracle과 Mysql 비교
Oracle | Mysql | |
구조 | DB 서버가 통합된 하나의 스토리지를 공유 | DB서버 마다 독립적인 스토리지를 할당 |
조인방식 | nested loop join, hash join, sort merge join 제공 | nested loop join 제공 |
확장성 | 별도의 DBMS 설치해 사용할 수 없음 | 별도의 DBMS를 설치해 사용할 수 있음 |
메모리 | 메모리 사용율이 커서 최소 수백 MB이상이 되어 설치가능 | 메모리 사용율이 낮아서 1MB 환경에서도 설치 가능 |
구문이 상이함 (null 체크, 현재 시간, 페이징 처리등) |
2. Index
2.1 인덱스란?
정의 | • 쉽게 찾아 볼수 있도록 일정한 순서에 따라 놓은 목록 |
목적 | • 원하는 값을 빠르게 찾는것이 목적(select 하기 위함, where절에 사용해야 의미가 있음) |
특징 | • 항상 최신 상태를 유지하고, 인덱스도 하나의 데이터베이스 객체로 약 10%정도 저장용량이 필요함 • 인덱스를 저장할때 B-TREE 자료 구조를 사용함 |
※ B-Tree 자료구조
• 데이터를 추가 할때 인덱스가 있을 경우 페이지 분할이 발생 할 수 있어 속도 이슈가 생길 수 있음.
2.2 인덱스 적용 기준
• 카디널리티가 높은(중복도가 낮은) 컬럼
• where, join, order by 절에 자주 사용되는 컬럼
• insert, update,delete가 자주 발생하지 않는 컬럼
• 규모가 작지 않은 테이블
2.3 클러스터링 인덱스
• primary key나 not null과 unique로 지정할 수 있음(primary key가 우선순위가 높음)
• 실제 데이터 자체가 저장되고 테이블당 1개만 존재가 가능
2.4 논클러스터링 인덱스(보조 인덱스, 세컨더리 인덱스)
• unique나 unique index, index로 지정이 가능
• 별도의 인덱스 페이지를 생성하고 테이블당 여러개가 존재 가능
※ 실제 데이터 페이지는 그대로 두고 리프페이지에서 실제 데이터 페이지 주소를 담고 있음
2.5 다수의 인덱스
※ 논클러스터링 인덱스로 쿼리 조회 과정
• 실제 논클러스터링 인덱스 페이지에선 데이터페이지 주소가 아닌 클러스터링된 컬럼 값을 가지고 있어서 그 컬럼값으로 클러스터링 인덱스 페이지에서 루트페이지를 통해 리프페이지에서 조회함
• 데이터 추가시 페이지 분할이 일어나면 많은 논클러스터링 데이터 페이지주소가 변경 될 수 있기 때문에 페이지주소가 아닌 컬럼 값을 가지고 있음
3. Join의 수행 원리 3가지
3.1 Nested Loop Join
• 2중 for문과 비슷
• 1:N의 관계일 때 1에 해당되는 소량의 데이터를 가진 테이블을 outer table로 설정, N에 해당되는 대량의 데이터를 가진 테이블을 inner table로 설정 해야 조회 속도가 빠름
• 인덱스에 의한 랜덤 엑세스를 기반으로 하고 있기 때문에 대량 데이터 처리시 불리함
• outer table에 조인을 위한 적절한 인덱스가 생성되어있어야함
• 다수의 트렌젝션을 처리하는 온라인 트렌잭션인 OLTP성 환경에 적합
※ outer table = driving 테이블, inner table = driven table
3.2 Sort Merge Join
• 2중 for문이지만 join 컬럼 기준으로 sorting 후 join 시킴
• join에 적절한 인덱스가 없을 경우 사용
• 대용량 자료를 join할때 사용
• Equal join이 아닌 범위로 join 할 경우 사용(범위 join)
• 인덱스 사용에 따른 랜덤 엑세스의 오버헤드가 많은 경우 사용
3.3 Hash Join
• inner table이 대용량일 때 outer join을 bulid input으로 삼아서 hash영역에 저장
※ hash 영역은 PGA(메모리)영역이기 때문에 처리속도가 빠름
• Hash영역으로 올라갈때 join 컬럼을 기준으로 Hash function이 적용 되기 때문에 key 컬럼에 중복값이 적을 수록 유리
• 배치에서 쓰면 좋은 수행원리, 대용량 table join 시 유리
• Hash 영역에 들어간 테이블 사이즈가 너무 크면 PGA영역의 메모리를 넘어 디스크영역을 사용하기 때문에 성능에 불리
'일상의 흔적 > Study' 카테고리의 다른 글
면접 SPRING 질문 - 2 (0) | 2023.03.22 |
---|---|
면접 Java 질문 - 1 (0) | 2023.03.22 |
자바 ORM표준 JPA 프로그래밍 (기본편) : STS로 세팅 (0) | 2023.03.22 |
자바 ORM표준 JPA 프로그래밍 (기본편) : JPA소개 - 1 (0) | 2023.03.22 |
생활코딩 OAuth2.0 (0) | 2023.03.21 |