본문 바로가기

개발/Database

(19)
CTE(Common Table Expressions) CTE는 standard SQL feature 이며, SELECT, INSERT, UPDATE, DELETE 또는 CREATE VIEW 문 하나의 실행 범위 내에서 정의되늰 임시 결과 집합이다. CTE 는 개체로 저장되지 않고, 쿼리 지속 시간 동안만 존재한다는 점에서 파생 테이블과 비슷하나, CTE는 파생 테이블과 달리 자체 참조가 가능하며 동일 쿼리에서 여러 번 참조할 수 있다. CTE는 항상 결과 집합을 반환합니다. 예를들어 기본 쿼리 본문에서 파생 테이블을 제거하는데 사용할 수 있습니다. SQL Server 에서 CTE 는 SELECT 문에서 사용할 수 있는 임시 결과 집합을 정의합니다. 복잡한 쿼리를 관리하는 편리한 방법이 됩니다. 공통 테이블 표현식은 WITH 연산자를 사용하여 SQL문 내부에..
ANSI SQL, Transact-SQL(T-SQL) ANSI SQL (American National Standards Institute Structured Query Language) 표준 SQL은 ANSI 표준 위원회에서 관리하고 있어서 ANSI SQL 이라고 한다. 모든 주요 DBMS는 각자의 확장 기능이 있지만 ANSI SQL을 표준적으로 지원한다. 다양한 DBMS에서 SQL을 지원하나 각자의 고유한 구문을 추가하는 경우가 많다. 추가 기능을 지원하거나 특정한 작업을 보다 간단히 하기 위함이다. Transact-SQL 마이크로소프트와 사이베이스가 SQL에 기능을 확장한 것을 말한다. 표준 SQL 에 문자열 처리, 날짜 처리, 계산 등을 위한 지원 함수, DELETE, UPDATE 에 대한 변경, 절차적 프로그래밍, 지역 변수를 포함한다. 마이크로소..
계층형 질의(Hierarchical Query) 1. 계층형 데이터 테이블에 계층형 데이터가 존재하는 경우 데이터를 조회하기 위해서 계층형 질의를 사용. 계층형 데이터란 동일 테이블에 계층적으로 상위와 하위 데이터가 포함된 데이터를 의미. 2. ORACLE 계층형 질의 SELECT ... FROM [TABLE_NAME] WHERE condition AND condition ... START WITH condition CONNECT BY [NOCYCLE] condition AND condition ... [ORDER SIBLINGS BY column, column, ...] - START WITH : 계층 구조 전개 시작 위치를 지정 - CONNECT BY : 자식 데이터 지정, CONNECT BY 의 조건을 만족해야 함 - PRIOR : CONNECT..
ORM(Object Relational Mapping) ORM(Object Relational Mapping) 에 대해 작성한다. ORM이란 객체와 관계형 데이터베이스의 데이터를 자동으로 연결해주는 것을 말한다. 오브젝트Relational Database 객체지향 프로그래밍은 클래스를 사용하고 관계형 데이터베이스는 테이블을 사용하기 때문에 객체 모델과 관계형 모델 간에 불일치와 이질성이 존재한다. ORM을 이용하여 객체의 형태로 데이터베이스에 SQL을 자동으로 생성하여 객체를 삽입하고 수정 등이 가능하다. ORM에서 말하는 객체의 의미는 OOP의 객체를 의미한다. 관계는 관계형 데이터베이스를 의미한다. 객체를 통해 간접적으로 데이터베이스 데이터를 다룬다. Persistant API라고도 할 수 있다.(JPA, Hibernate) ORM을 사용하면 객체 지향적..
데이터베이스 정규화, 반정규화 데이터베이스의 정규화, 반정규화에 대해 작성한다. 1.정규화(Normalization) 정규화는 데이터의 중복성을 제거하여 여러 엔티티의 조인이 발생하는 데이터베이스 환경에서 성능을 향상시키기 위한 데이터 구조화 프로세스를 말한다. 정규화 단계 -제1정규화 중복되는 컬럼을 제거한다. -제2정규화 종속되는 값을 제거한다. -제3정규화 엔티티에 맞는 데이터로 분리한다. 2. 반정규화(역정규화, Denormalization) 정규화로 인해 테이블 수가 증가하면 다수의 조인이 발생함에 따라 성능 저하가 발생할 수 있다. 이 문제를 해결하고자 정규화 과정이 모두 마무리된 다음 반정규화를 실시한다. 단 테이벌을 합치는 것만이 반정규화는 아니다. -그룹에 대한 합계 값을 미리 계산하여 테이블에 저장 (기존 테이블에 ..
Index Index는 테이블에 저장된 데이터를 빠르게 조회하기 위한 데이터베이스 객체이다. 대부분 B-Tress, B+Tree 구조를 가진다. Index는 논리적/물리적으로 테이블과 독립적이다. 테이블의 레코드는 순서 없이 저장되는데 인덱스가 없는 테이블의 데이터를 찾을 때 무조건 풀스캔을 한다. 데이터의 양이 많을 경우 풀스캔을 하게되면 처리 성능이 떨어진다. 인덱스를 통해 데이터를 빨리 찾고자 사용한다. 인덱스를 생성할 때는 WHERE 절과 JOIN, ORDER BY 등 키 값의 선별이 가능한 컬럼에 생성한다. 테이블이 자주 갱신될 경우엔 인덱스를 사용하지 않는 것이 좋다. 인덱스는 클러스터드 인덱스와 논클러스터드 인덱스로 나누어진다. 클러스터드 인덱스는 물리적인 정렬로 데이터를 입력 시 이것을 기준으로 입력..
SQL - GROUP BY, HAVING GROUP BY 데이터를 원하는 그룹으로 나누어 가져온다. 그룹의 컬럼명을 GROUP BY 절 뒤에 추가해 사용한다. 집계함수와 함께 사용되는 상수는 GROUP BY 절에 추가하지 않아도 된다. SELECT TEST_NAME, TEST_TEXT, COUNT(*) FROM TEST GROUP BY TEST_NAME ORDER BY COUNT(*) ASC; HAVING WHERE 절에서는 집계함수 사용이 불가능하다. 집계함수를 가지고 조건비교를 할 때 HAVING 을 사용한다. SELECT TEST_NAME, TEST_TEXT, COUNT(TEST_NO) FROM TEST GROUP BY TEST_NAME HAVING COUNT(TEST_NO) > 3;
SQL 튜닝 같은 결과의 쿼리는 여러 형태로 작성될 수 있으며 옵티마이저가 실행계획을 생성할 때 최대 성능의 쿼리를 작성해야 한다. 옵티마이저는 SQL을 가장 빠르고 효율적으로 수행할 최적의 처리경로를 생성해주는 DBMS 내부의 핵심 엔진이다. 사용자가 구조화된 질의언어로 결과집합을 요구하면 이를 생성하는데 필요한 처리경로는 DBMS에 내장된 옵티마이저가 자동으로 생성해주며 이 처리 경로를 실행계획이라고 부른다. 더 높은 성능의 쿼리를 작성하기 위한 튜닝 가이드라인을 작성한다. 1. WHERE 조건에 인덱스 모두 사용 TEST 테이블에서 TEST_NO, TEST_CONTEXT 컬럼이 TEST_NO_IDX 인덱스로 존재할 때 아래 쿼리는 인덱스를 사용하지 않는다. SELECT * FROM TEST WHERE TEST_..