일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
Tags
- 의존성
- REDIS
- 레벨2
- 우아한테크코스
- HTTP
- MSA
- yml
- 트랜잭션
- Level2
- 우아한세미나
- JPA
- Spring Batch
- 세션
- 미션
- mock
- 자바
- 코드리뷰
- 서블릿
- 프리코스
- 스프링부트
- AWS
- 백준
- Paging
- 프로그래머스
- Docker
- AOP
- 스프링 부트
- 우테코
- JUnit5
- CircuitBreaker
Archives
- Today
- Total
늘
데이터베이스 관리 시스템(DBMS) & 튜닝 본문
728x90
백앤드 개발자의 친구 데이터베이스를 알아보려고 한다
[데이터베이스의 특징]
- 실시간 접근성 : 사용자의 질의에 대하여 즉시 처리하여 응답한다.
- 계속적인 진화 : 삽입, 삭제, 갱신을 통하여 항상 최근의 정확한 데이터를 동적으로 유지한다.
- 동시 공유 : 여러 사용자가 동시에 원하는 데이터를 공유할 수 있는 특징을 갖는다.
- 내용에 의한 참조 : 데이터베이스에 있는 데이터를 참조할 때 투플(tuple)의 주소나 위치가 아닌 사용자가 요구하는 데이터 내용에 따라 참조한다.
- 데이터 논리적 독립성 : 응용프로그램과 데이터베이스를 독립시킴으로써 데이터 논리적 구조를 변경시키더라도 응용프로그램은 변경되지 않는다.
[데이터베이스 관리 시스템]
- 데이터베이스를 조작하는 별도의 소프트웨어로, DBMS를 통해 데이터베이스를 관리하여 응용 프로그램들이 데이터베이스를 공유하고, 사용할 수 있는 환경을 제공
- 데이터베이스를 구축하는 틀을 제공하고, 효율적으로 데이터를 검색하고 저장하는 기능 제공
- 인터페이스 제공, 장애에 대한 복구 기능, 유저 권한에 따른 보안성 유지 기능 등 제공
- 자료의 중복성 제거, 무결성, 일관성, 유용성을 보장하기 위해서 자료를 제거하고 관리하는 소프트웨어 체계
[DBMS의 장점과 유형]
- 자료와의 관계성을 정의하기 때문에 자료의 통합성 증진, 접근성 용이, 데이터 통제 강화, 보안 강화
- 관계형 데이터베이스 관리 시스템(RDBMS)
- NoSQL DBMS
- 인 메모리 데이터베이스 관리 시스템(IMDBMS)
- 기둥형 데이터베이스 관리 시스템(CDBMS)
[DBMS의 종류]
[DBMS vs FIle]
그렇다면 왜 file로도 관리할 수 있는데, DBMS를 이용할까?
-> 표준, 보안: db는 모두가 함께 사용하기 때문에 표준이 중요하다 따라서 file보다 DBMS를 이용하는 것 같다.
[옵티마이저]
- 사용자가 요청한 SQL을 가장 효율적이고 빠르게 수행할 수 있는 최적의 처리경로를 선택해주는 DBMS의 핵심 엔진을 말함
[데이터베이스 성능 튜닝]
- 응용 개발자 - SQL문장들을 튜닝함
- Oracle을 사용할 경우라면, EXPLAIN PLAN이나 TKPROF등의 유틸리티의 사용에 친숙해지고 그들의 프로그램에 광범위하게 적용할 수 있어야 한다.
튜닝에 대해 설명하기 전, 간단한 용어 정리부터 하고 넘어가보겠다!
- 인덱스 : 추가적인 쓰기 작업과 저장 공간을 활용하여 데이터베이스 테이블의 검색 속도를 향상시키기 위한 자료구조, 즉 포인터와 비슷하다고 생각하면 되겠다.
- 인덱스를 사용하지 않는 컬럼을 조회하려면 Full Scan(전체 탐색)을 해야하는데 이러면 전체를 비교하고 탐색하기 때문에 처리속도가 떨어진다.
- INSERT: 새로운 데이터에 대한 인덱스를 추가함
- DELETE: 삭제하는 데이터의 인덱스를 사용하지 않는다는 작업을 진행함
- UPDATE: 기존의 인덱스를 사용하지 않음 처리하고, 갱신된 데이터에 대해 인덱스를 추가함
- 인덱스는 테이블 조회 속도아 성능을 향상 시킬 수 있지만 DB의 10%정도의 저장공간이 필요하고, 인덱스를 잘못 사용할 경우 오히려 성능이 저하된다.
- 이 외에 인덱스 자료구조에 Hash Table, B+ Tree 등이 있는데 https://mangkyu.tistory.com/96 이 블로그를 참고하면 좋을것 같다!
[sql튜닝]
- 가급적 WHERE 조건에서는 인덱스 칼럼을 모두 사용 : 인덱스를 만들어 놓더라도 WHERE 조건을 어떻게 명시하느냐에 따라 옵티마이저가 인덱스를 사용할 수도 있고 사용하지 않을 수도 있다.
ex) ORDER 테이블에서 ORDER_NO, ORDER_REV 컬럼이 ORD_NO_IDX 인덱스로 만들어져 있을 때, 아래와 같은 쿼리는 인덱스를 사용하지 않고 FULL SCAN을 하게 된다.
아래처럼 사용해야 한다.SELECT * FROM ORDER WHERE ORDER_REV ='1'
SELECT * FROM ORDER
WHERE ORDER_NO = '900000'
AND ORDER_REV = '1'
- 인덱스 칼럼에 사용하는 연산자는 가급적 '='을 사용하라 :인덱스 컬럼을 WHERE조건에 모두 명시하였더라도 LIKE와 같은 연산자를 사용하면 인덱스 효율이 떨어진다.
- LIKE 외에도 IS NULL, IS NOT NULL, NOT IN 등이 사용되었을 경우에도 마찬가지 현상이 발생한다.
- 인덱스 컬럼은 변형하여 사용하지 않도록 한다 : WHERE 조건에 인덱스 컬럼을 사용했고, 동등 연산자를 사용했다 하더라도 인덱스 컬럼에 변형을 가하게 되면 인덱스를 사용하지 못한다.
- OR 보다는 AND를 사용해라
- 그룹핑 쿼리를 사용할 경우 가급적 HAVING 보다는 WHERE 절에서 데이터를 필터링하라 : 그룹핑 쿼리 처리순서는 WHERE 조건이 먼저 처리되므로 가급적 필터링 할 대상은 WHERE 조건에서 처리할 수 있게 쿼리를 작성하도록 한다
- DISTINCT는 가급적 사용하지 마라 : DISTINCT는 내부적으로 정렬을 수행하기 때문에 가급적 피하는게 좋다. (제가 알기론 서브쿼리를 이용해서 풀라고 알고 있습니다!)
- IN, NOT IN 대신 EXISTS 와 NOT EXISTS를 사용하라
Reference
728x90
'백앤드 개발일지 > 데이터베이스' 카테고리의 다른 글
[postgreSQL] order by와 limit이 걸린 슬로우 쿼리 해결 방법 (0) | 2024.05.25 |
---|---|
[데이터베이스] B+Tree, 해싱, 인덱싱 정리 (0) | 2021.11.10 |
[대용량 데이터 처리] Master-Slave db replication 설정 with docker (2) | 2021.10.21 |
식별자와 비식별자 (0) | 2021.08.11 |
Comments