이유's Programming/DBMS
DBMS 의 구조를 파악해보자
데이터베이스 관리 시스템(DBMS)의 전체적인 구조는 크게 메모리 구조, 프로세스 구조, 스토리지 구조로 나눌 수 있습니다. 각각의 요소는 DBMS가 효율적으로 데이터를 관리하고 처리하는 데 필수적인 역할을 합니다. Oracle DBMS를 예로 들어 SGA를 포함한 전체적인 데이터베이스 구조를 설명하겠습니다. 1. 메모리 구조 (Memory Structure)데이터베이스의 메모리 구조는 주로 SGA(System Global Area)와 PGA(Program Global Area)로 나눌 수 있습니다. 이 구조는 데이터베이스와 사용자 세션 간의 데이터 교환과 SQL 실행 성능을 최적화하는 데 중요한 역할을 합니다.1-1. SGA (System Global Area)SGA는 데이터베이스 인스턴스에서 공유되는..
인덱스.. 그래서 어떻게 해야 효율적이야? (필터조건, 액세스 조건)
인덱스를 설정하는 것은 정말 운영환경에서 중요한 것으로 효율적으로 설정하기 위해서는 반드시 "필터 조건"과 "액세스 조건"을 이해해야 한다. 액세스 조건 - 인덱스 스캔 범위를 결정 필터 조건 -- 인덱스를 설정했는데 원하는 테이블 결곽 나오지 않았을 경우 이제 테이블로 가기 위한 조건이다 \인덱스의 액세스 조건(Access Predicate)과 필터 조건(Filter Predicate)은 데이터베이스에서 인덱스가 사용될 때, 쿼리의 효율성을 결정하는 중요한 요소들입니다. 이 두 가지는 실행 계획에서 인덱스가 어떻게 사용되는지를 설명하며, 옵티마이저가 인덱스 스캔을 통해 데이터를 검색하는 방식과 조건을 나누어 분석할 수 있게 해줍니다.1. 인덱스의 액세스 조건 (Access Predicate)액세스 ..
인덱스 스캔의 효율적인 방식...?
인덱스는 운영환경에서 DB 를 효율적으로 관리하기 위해 설정하게 되면 효율을 아주 높일 수 있따. 이처럼 인덱스를 설정하게 됬을 때 이것이 효율적인지 아닌지를 어떻게 알수 있을까? 우선 크게 SQL 실행계획 그리고 통계, 그리고 wait event 등을 통해서 알 수가 있다. . SQL 실행 계획(Execution Plan) 확인SQL 실행 계획을 확인하는 것은 인덱스 스캔 효율성을 파악하는 첫 번째 단계입니다. 실행 계획은 SQL이 실행될 때 어떻게 처리되는지를 보여주며, 인덱스 사용 여부, 풀 테이블 스캔 여부 등을 확인할 수 있습니다.1-1. EXPLAIN PLAN 명령어 사용EXPLAIN PLAN FOR SELECT * FROM employees WHERE department = 'HR'; SE..
[ 3 -5 ] 계층형 질의
계층형 질의는 -> 우선 테이블의 상위 사원과 하위 사원 관계가 있다. 해당 테이블에서 가서 상위 사원과 하위 사원 관계데이터에 대해서 서로 연결되는 것잉 있다.! 사원 테이블 에서 사원들 사이에 상위 사원( 관리자) 과 하위 사원 관계가 존재함. A. 순환 관계 아래에 대한 예시. 관리자로서 우선 두개의 테이블만 JOIN 해서 보면 되는 관계 순환 관계는 - SELF JOIN 을 통해서 해당 내용을 본다. SELECT WORKER.EMPNO AS 사원번호, WORKER.ENMAE AS 사원명, MANAGER.ENAME AS 관리자명 FROM EMP WORKER, EMP MANAGER WHERE MANAGER.EMPNO = WORKER.MGR B. 계층형 모델 SELECT ... FROM 테이블 WHER..
[ 3- 4] 그룹 소계함수 - 보고서 작성을 훨씬 쉽고 매끄럽게! group by 와 order by 사용 / rollup 과 order by 함수
우선 두 가지 방법이 있는데 먼저 group by 의 사용을 먼저 보자. Products table 에 group by 를 이용해서 하는 경우를 확인해보자! 1) group by 케이스 SELECT count(*), categoryid FROM Products group by CategoryID 2) Roll up 케이스 - ROLLUP 의 특징 : 아래 처럼 이렇게 1개의 그룹에 대해서 하는 것이 아니라 여러 그룹 즉 소그룹 간의 데이터를 하는 것이기 때문에 아래와 같은 예시는 쓰이지 않는다. SELECT count(*), categoryid FROM Products group by ROLLUP ( categoryid) order by category id 단 다양한 GROUP 에 대해서 쓰이는데 se..
다중 행 서브 쿼리
서브 쿼리의 결과가 2건 이상 반환 될 수 있다면, 반드시 다중 행 비교 연산자 ( IN, ALL, ANY, SOME) 와 함께 사용해야 한다. 지금 부터 살펴볼 것은 다중 행 서브 쿼리이다. 즉 서브쿼리 안에 ( select * from ) 을 해서 나온 결과값들이 이제 하나의 값이 아니라 2개 이상일 때 쓰이는 것이다. - Any 조건 * 서브 쿼리 결과에 존재하는 값에 어느 하나의 값이라도 만족하면 이가 쓰임. * return 값 : boolean true 인지 false 인지 SELECT ProductName FROM Products WHERE ProductID = ANY (SELECT ProductID FROM OrderDetails WHERE Quantity = 10); - ALL 조건 * 모..
SQL 쿼리 - group by / having
집계 함수는 여러 행들의 그룹이 모여서 단 하나의 결과를 돌려주는 함수를 말하는 것! 그래서 크게 어떤 데이타를 어떤 기준으로 묶을 때 우리는 집계 함수를 쓰게 된다. GROUP BY 함수 - Group by 절은 행들을 소그룹화한다. - SELECT 절 / HAVING 절 / ORDER BY 절에 사용할 수 있다. 예시 ) 케이리그 선수들의 포지션별 평균키는 어떻게 되는가? 란 요구사항에 맞는 쿼리 SELECT POSITION AS 포지션, AVG ( HEIGHT) AS 평균키 FROM PLAYER GROUP BY 포지션 HAVING AVG ( HEIGHT) >= 180 CASE 표현을 활용한 월별 데이터 집계 집계함수 ( CASE () ~ GROUP BY ) 기능은 반복되는 칼럼을 이제 구분용 칼럼을..
[ 4 - 3] 인덱스 종류
이번에는 인덱스 종류에 대해서 먼저 살펴볼 것이다. 인덱스는 다양한 종류가 있는데 우선 모든 DBMS 가 B* Tree 를 기본적으로 제공한다. 가. B* Tree 인덱스 몇가지 조건을 통해서 BALANCED된 상태로 유지시켜주는 자료구조이다. B* Tree 의 인덱스는 B 인 Balanced 의 약자로서 인덱스 루트에서 리프 노드까지 어떤 값으로 탐색하더라도 같음을 의미한다. 루프로부터 모든 리프 블록까지의 높이가일정하다. 하지만 Index Skew 또는 Sparse 현상이 생기는 경우가 있다. 이는 인덱스 효율에 좋지 않는 구조를 보여준다. * Index Skew : 인덱스 엔트리가 왼쪽 또는 오른쪽에 치우치는 현상을 말함. 왼쪽 에 있는 인덱스 엔트리가 empty 고 오른쪽에 있는 인덱스 엔트리는 ..