본문 바로가기

IBSHEET10

쉽게 이해할 수 있는 OLTP와 OLAP성 쿼리의 차이 OLTP(On-Line Transaction Processing) 다수의 이용자가 실시간으로 데이터를 갱신하거나 조회하는 경우 트랜잭션 단위로 작업을 처리하는 방식을 말합니다. 간단한 예시로 은행의 업무를 예로 A라는 사람 통장의 돈 5000원을 B라는 사람에게 이체하는 방식을 살펴봅시다 1. A의 통장에서 5000원이 감소 2. B의 통장에 5000원이 증가 3. 명세표를 출력 이렇게 동작할때 1,2,3이 하나의 단위 프로세스로 처리가 되어야한다는 것을 의미합니다. 이러한 일련의 과정을 하나의 트랜잭션으로 묶고 A의 통장에서 5000원이 감소하고 B의 통장에 5000원이 증가하기 전에 오류가 발생하게 되면 트랜잭션이 발생하기 전의 상황으로 돌아가게 되는 것입니다. OLAP(On-Line Analytic.. 2023. 6. 18.
성능 좋은 SQL 쿼리 작성법(차집합 NOT IN, CTE 재귀 호출 활용, 쿼리 힌트 사용 주의) 1. 차집합 구하기-NOT IN 사용주의 결과데이터 정합성 문제 OR 실행 계획 최적화 이슈 - NULL qksghksehlwl dksgehfhr cjfl - NOT EXISTS 또는 다른 차집합 구현 방법 고려 - NOT IN 필요 시 주의해서 사용 ex) WHERE ID NOT IN (SELECT ID FROM DATA WHERE ID IS NOT NULL) 2. CTE-재귀 호출(순환관계 모델) 처리에 활용 예) 조직구조, 메뉴 경로, BOM, etc. 복잡합 조건식/유형 - 쿼리 튜닝 필요 (사진참조) 3. 쿼리 힌트 사용 주의 OPTION() 옵티마이저 대신 쿼리 동작을 강제하는 방법 중의 하나 필요한 경우 DBA(or DPA/DA/전문가)검토 후 사용 ○ 특히 공통적으로 주의가 필요한 힌트 -.. 2023. 6. 18.
성능 좋은 SQL 쿼리 작성법(Subquery) 1. Flattened(Unnest subqueries) Join으로 변환후, Join으로서 처리 - 직접 Join 사용 경우와 차이 발생 가능(조인순서, 연산 방법 등의 차이 발생) 2. 언제 Subquery를 사용할까? ① Semi Join 한쪽 테이블만 SELECT 결과 집합으로 요구 다른 쪽 테이블은 데이터를 체크하는 선택(selection)연산만 수행 - Subquery로 작성해서 최적화 작업 ex) SELECT DISTINCT ID FROM DATA A INNER JOIN DAT B ON A.ID = B.ID => SELECT ID FROM DATA A WHERE EXISTS(SELECT * FROM DAT B WHERE B.ID = A.ID) ② TOP 절 등을 이용 결과 집합이 일부로 제한.. 2023. 6. 18.
성능 좋은 SQL 쿼리 작성법(JOIN) 1. OLTP 쿼리의 기본 - Nested Loops(중첩루프)Join 성능 이해 교환 법칙에 따라 INNER 조인은 조인순서와 상관없이 결과가 똑같다. Nested Loops은 첫번째 검색 테이블에서 값을 조회 하고 두번째 검색 테이블에서 동일한 값을 찾아서 반환한다. - 외부입력 : 검색행수가 더 적은 테이블이 - 첫번째 테이블 - 내부입력 : 조인하는 컬럼에 반드시 Index 사용(없으면 생성) SARG 준수 - 두번째 테이블 2. 조인 열 변형(사례 - 모델링 이슈) ex) SELECT * FROM C TNNER JOIN P ON C.index = CONVERT(varchr(100),P.ID) CONVERT함수 때문에 SARG 위반하여 index 사용이 불가하다. - 내부입력 조인테이블에 속한 컬.. 2023. 6. 17.
[mysql] 조회, Index냐 Full Scan이냐 데이터가 제법 쌓여있는 테이블이 있는데, 거기를 조회할때마다 가급적이면 인덱스를 쓰겠금 유도한다. 그런데 최근 SQLP 공부하면서 인덱스를 무조건 태우는 것이 좋지 않암을 많이 깨닫는다. 그럼 인덱스를 사용할때와 아닐때의 차이는 어느 기준으로 분류해야할까를 찾아보고 정리해보앗다. 진행은 MySQL로 했으며 해당테이블은 약 2억개의 데이터가 탑재되어 있는 거래정보 테이블이며, 고객테이블과 조인하는 고정이었다. 특정 기간을 조회하는 일이 빈번해서 생성일자를 기반한 인덱스가 생성되어있는 상태다. 특정기간 데이터를 조회하려는 것이었고, 조회조건에 생성일자 범위를 넣어 조회했다. 그런데 다음과 같이 인덱스가 아닌 Full scan(ALL)이 되고 있었다. 실행결과는 약 15분정도 소요됐다. 이번에는 힌트를 이용해.. 2023. 4. 18.
ANSI 표준 ANSI SQL DBMS(Oracle, My-SQL, DB2 등등)들에서 각기 다른 SQL를 사용하므로, 미국 표준 협회(American National Standards Institute)에서 이를 표준화하여 표준 SQL문을 정립 시켜 놓은 것이다. 어디서나 통용될 수 있는 공통적인 기준 " 이라고 볼 수 있다. 이러한 ANSI는 SQL에서도 찾아볼 수 있으며, 대표적으로 JOIN 구문에서 확인할 수 있다. ANSI의 뜻 미국 국립 표준 협회(American National Standards Institute, ANSI) 미국의 산업 표준을 제정하는 민간단체이며, 국제표준화기구 ISO에 가입되어 있다. ANSI에서 제정된 표준을 ANSI라고 부르기도 한다. 1918년 AESC란 이름으로 창설되었으나,1.. 2023. 4. 18.