전체 글 30

[Oracle] 경우의 수 구하기

아래와 같은 코드 목록을 가진 테이블에서 코드를 조합하여 만들어 낼 수 있는 모든 경우의 수에 대한 결과를 출력하는 쿼리 작성 CODE A B C 문제 설명 코드 3개로 구할 수 있는 모든 경우의 수는 코드 1개 일때 조합, 2개일때 조합, 3개일때 조합 모두 구하기 코드의 개수는 정해져 있지 않음(가변적으로 늘어날 수 있음) 이때 2가지 방식의 경우에 정답 작성 순서와 무관한 경우의 수 : A-B/ B-A 같은 경우의 수로 취급하여 A-B 한개만 출력 순서가 있는 경우의 수 : A-B/ B-A 다른 경우의 수로 취급, 각각 조회되도록 작성 CREATE TABLE TEST AS ( SELECT 'A' code FROM dual UNION ALL SELECT 'B' FROM dual UNION ALL SE..

Optimizer란?

1. Optimizer란? 사용자가 질의한 SQL문에 대해 최적의 실행 방법(가장 효율적인 방법)으로 최적의 처리 경로를 결정하는 역할로 DBMS의 핵심 엔진 SQL을 작성하고 실행하면 즉시 실행되지 않고 Optimizer에서 쿼리문에 대한 실행계획 생성 실행계획은 Optimizer가 생성한 SQL 처리 경로 여러가지 실행계획 생성 후 시스템 통계 정보를 활용하여 각 실행계획의 비용 산정 각 실행계획을 비교해서 최고의 효율을 가진 실행계획 실행 최적화의 목표는 전체 처리 속도/최초 응답 속도 최적화 RBO(Rule-Based Optimizer) 규칙(우선순위)를 가지고 실행계획 생성(실행속도가 빠른순으로 규칙을 세워둠) Optimizer힌트와 Hash Join 사용 불가 CBO(Cost-Based Opt..

Tuning 2023.09.25

[DA가이드 4.1.1] 데이터 모델링 개요

1. 데이터 모델링 정의 1.1 데이터 모델링 탄생배경 정보시스템의 핵심인 데이터를 중복없이 정확하게 유지/관리 하기 위함 기업의 정확한 정보 시스템 구축을 위해서 설계/개발보다 정확한 업무파악(데이터에 대한 정확한 분석)이 선결되야 한다는 결론 현실세계를 더 잘 표현하기위해 개체 관계 모델링 기법(ERD - Entity Relationship Diagram)으로 발전 1.2 모델의 정의 데이터 모델은 현실세계에 대해 우리가 관심있어 한느 대상을 데이터베이스화하기 위한 개념적 도구 1.3 모델링의 정의 실체를 나타내는 일과 모형화 데이터 모델링이란 사용자의 요구사항에서 데이터의 실체를 나타내는 일 기업 업무에 대한 종합적인 이해를 바탕으로 데이터에 존재하는 업무 규칙(Biz. Rule - Business..

[DA가이드 1-1-4] 전사아키텍처 프로세스

1. 전사아키텍처 프로세스 개요 전사아키텍처를 구축하고 관리하는 전체 절차에 관한 것으로 작업의 단계와 공정, 작업내용 등을 정의하는 것 일반화되어 있는 방법론 존재하지만 기업의 목적에 맞게 프로세스 조정 가능 전사 아키텍처 프레임워크 구성 요소이기도 하며 전사 아키텍처 프레임워크 내의 다른 구성 요소를 정의하기 위한 모든 절차와 작업을 포함 2. 전사아키텍처 프로세스 구성 전사아키텍처 프로세스는 비전 수립, 전사아키텍처 구축, 전사아키텍처 관리, 전사아키텍처 활용 단계로 구분 가능 전사아키텍처 구축시에는 단계별로 보고회 및 워크샵 형태의 행사를 통해 이해관계자의 지속적인 참여을 유도 단계 공정 내용 EA 비전 수립 EA 방향 수립 내외부 EA 환경분석 기업의 EA 목적 및 방향 정의 EA프레임워크 정의..

[PostgreSQL]IP목록 정렬

문제> 다음과 같은 ip목록을 가진 [그림1]테이블에서 ip순서대로 정렬[그림2]하여 결과 출력 *Postgre SQL은 rownum 사용 불가하여 row_number 사용 1. rownum없어 row_number로 대체하여 num생성 row_number order by ip로만 생성시 10,100,10.1과 10.100.1.10의 순서가 뒤바뀜 SELECT ROW_NUMBER()OVER(ORDER BY CASE WHEN split_part(IP,'.',3)='10' THEN 1 ELSE 2 END , IP)NUM, IP FROM T 2. split_part로 '.'구분자로 나눈뒤 lpad로 3자씩 채워 정렬진행 SELECT NUM, IP FROM(SELECT ROW_NUMBER()OVER(ORDER B..

[PostgreSQL]연속된 날짜를 하나의 그룹으로 표현

문제 번호와 날짜를 가진 [그림1]테이블에서 번호별 연속된 날짜를 하나의 그룹으로 묶어 [그림2]와 같이 번호, 시작일, 종료일, 일수를 보여주는 쿼리 작성 테이블의 번호와 날짜는 중복되지 않는 유일한 값 SELECT NUM , MIN(DT) FROM_DT, MAX(DT)TO_DT, COUNT(DT) CNT FROM (SELECT NUM, DT , SUM(FLAG)OVER(PARTITION BY NUM ORDER BY DT) GRP FROM (SELECT NUM, DT , CASE WHEN TO_DATE(LAG(DT)OVER(PARTITION BY NUM ORDER BY DT),'YYYYMMDD')= TO_DATE(DT,'YYYYMMDD')-1 THEN 0 ELSE 1 END FLAG FROM T) A)..

정렬제거를 위한 인덱스 선정 방법

인덱스를 이용해야 우리가 원하는 조회 성능을 보장 받을 수 있음 하지만 인덱스를 많이 생성하면 여러가지 부작용 발생 인덱스 부작용을 최대한 방지하려면 최적의 결합 칼럼 인덱스를 생성해야 하며 단일 칼럼 인덱스는 자제해야함 정렬의 제거는 인덱스에 의해 좌우 정렬을 제거하려면 어디엔가 정렬된 데이터 존재해야함 DB에서 데이터를 저장하는 장소는 TABLE과 INDEX 인덱스는 인덱스를 구성하는 칼럼의 값이 실제로 저장 테이블과 인덱스 둘 중 한곳에 정렬된 데이터가 저장된다면 그 것을 이용하여 자동으로 정렬된 값 추출 가능 TABLE : 데이터가 INSERT되는 순서에 의해 저장되므로 어떤 칼럼에 의해 정렬된 데이터 저장되지 않음 INDEX : 인덱스를 구성하는 칼럼에 의해 정렬된 데이터 저장 - 인덱스의 첫번..

Tuning/INDEX 2023.09.21

추출 랜덤 액세스와 정렬 랜덤 액세스

무조건 많은 개수의 칼럼으로 결합 인덱스를 생성하는 것은 아니지만 그만큼 인덱스의 유연성 증가 유연성에 의해 테이블에 10개의 인덱스가 필요할 수도 있고 5개의 인덱스로 모든 액세스 경로를 수용 할 수도 있음 최소의 인덱스로 모든 액세스 경로를 최적화하기 위해서는 결합 칼럼 인덱스의 선정에 신중해야함 추출 랜덤 액세스 : SELECT절의 데이터를 추출하기 위해 인덱스 액세스 후 테이블을 액세스해야 하는 랜덤 액세스 정렬 랜덤 액세스 : ORDER BY절, GROUP BY 절 등에 의해 인덱스 액세스 후 테이블을 액세스 해야하는 랜덤 액세스 종류 발생위치 추출데이터 확인 랜덤 액세스 WHERE절/ HAVING절 감소 또는 동일 정렬 랜덤 액세스 ORDER BY절/ GROUP BY절 동일 추출 랜덤 액세스 ..

Tuning/INDEX 2023.09.21

랜덤액세스 이해

SQL이 인덱스를 이용해야 할 지 아니면 인덱스를 이용하지 말아야 할지를 결정하는 것이 SQL 최적화의 첫걸음 인덱스를 이용해야 하는 SQL을 구분하여 해당 SQL은 최적의 인덱스를 이용해야한다. 랜덤액세스란 ? 데이터 저장 블록을 한번에 여러 개 액세스 하는 것이 아니라 한번에 하나의 블록만을 액세스하는 방식 전체테이블 스캔 테이블 전체 스캔의 경우는 여러개의 블록을 한번에 액세스하기 때문에 여러 블록을 액세스하는 다중 블록 I/O 수행 한번에 여러개의 블록을 액세스하며 같은 양에 데이터에 대해 적은 횟수의 디스크I/O 발생하여 성능 향상 랜덤 액세스 발생이유 인덱스를 액세스하여 확인한 ROWID를 이용하여 테이블을 액세스 하는 경우 랜덤 액세스 발생 ROWID는 해당 데이터를 찾아가는 유일한 주소 값..

Tuning/INDEX 2023.09.21