소소한 일상과 잡다한 정보
반응형

sqld 24

[SQLD] 조인 종류와 수행 원리

조인 종류와 수행 원리 Join - 두 개 이상의 테이블을 하나의 집합으로 만드는 연산(두 테이블 사이에서 수행) - 자주 사용하는 Join으는 NL Join, Sort Merge Join, Hash Join이 있다. NL Join( Nested Loop Join ) - 중첩된 반복문과 유사한 방식으로 사용. - 랜덤 액세스 방식으로 데이터를 읽는다. - 외부 테이블의 각 행에 대해 내부 테이블을 한 번만 스캔한다. 작업 방식 1. 선행 테이블에서 주어진 조건을 만족하는 행을 찾는다. -> 이때 선행 테이블에 주어진 조건을 만족하는 첫 번째 행을 찾는다. 2. 선행 테이블의 조인 키 값을 가지고 후행 테이블에 조인 키가 존재하는지 확인. -> 조인 시도 3. 후행 테이블의 인덱스에 선행 테이블의 조인 키..

[SQLD] 옵티마이저와 테이블 스캔

옵티마이저와 테이블 스캔 옵티마이저 - 사용자가 질의한 SQL문에 대해 최적의 실행 방법을 결정하는 역할을 수행 - 다양한 실행 방법들 중에서 최적의 실행 방법을 결정하는 것이 옵티마이저의 역할임. - 관계형 DB는 옵티마이저가 셜정한 실행 방법대로 실행 엔진이 데이터를 처리하여 결과 데이터를 사용자에게 전달하는 역할을 할 뿐이다. - 최적의 실행방법( 어던 방법으로 처리하는 것이 최소 일량으로 동일한 일을 처리할 수 있는지 ) 규칙기반 옵티마이저 - 규칙(우선 순위)을 가지고 실행계획을 생성한다. 규칙기반 옵티마이저의 규칙(15가지 순서) 순위 엑세스 기법 규칙 설명 1 Single row by rowid Rowid를 통해서 테이블에서 하나의 행을 액세스 하는 방식, Rowid는 행이 포함된 데이터 파..

[SQLD] 서브쿼리와 그룹함수(Group Function)

서브쿼리와 그룹함수 서브쿼리 - 하나의 SQL문 안에 포함되어 있는 또 다른 SQL문을 말한다. - 서브쿼리는 알려지지 않은 기준을 이용한 검색을 위해 사용한다. 서브쿼리 예시 select 칼럼1,칼럼2 FROM 테이블명 where 조건= (select.....from....where); 조인과 서브쿼리의 분류 조인 - Join에 참여하는 모든 테이블이 대등한 관계에 있기 때문에 조인에 참여하는 모든 테이블의 칼럼을 어느 위치에서라도 자유롭게 사용할 수 있다. 서브쿼리 - 메인쿼리의 칼럼을 모두 사용할 수 있지만 메인쿼리는 서브쿼리의 칼럼을 사용할 수 없다. - 질의 결과에 서브쿼리 칼럼을 표시해야 한다면 조인 방식으로 변환하거나 함수, 스칼라 서브쿼리 등을 사용해야 한다. 서브쿼리 사용시 주의점. - ..

[SQLD] 집합연산자와 계층형 질의

집합연산자와 계층형 질의 집합 연산자(Set Operator) - 여러 개의 질의의 결과를 연결하여 하나로 결합하는 방식을 사용 - 집합 연산자는 2개 이상의 질의 결과를 하나의 결과로 만들어 줌 - 서로 다른 테이블에서 유사한 형태의 결과를 반환하는 것을 하나의 결과로 합치고자 할 때와 동일테이블에서 서로 다른 질의를 수행하여 결과를 합치고자 할 때 사용할 수 있다. - 튜닝관점에서 실행계획을 분리하고자 하는 목적으로도 사용 Caution. * SELECT 절의 칼럼 수가 동일하고 SELECT 절의 동일 위치에 존재하는 칼럼의 데이터 타입이 상호 호환 가능해야 한다. 그렇지 않으면 데이터베이스가 오류를 반환한다. 집합 연산자의 종류 집합 연산자 의미 UNION 여러 개의 SQL문의 결과에 대한 합집합으..

[SQLD] ORDER BY 와 JOIN

Order by 와 Join ORDER BY 절 - SQL 문장으로 조회된 데이터들을 다양한 목적에 맞게 특정 칼럼을 기준으로 정렬하여 출력하는데 사용 ODER BY 절의 예로 선수 테이블에서 선수들의 이름, 포지션, 백넘버를 출력하는데 사람 이름을 내림차순으로 정렬하여 출력한다. ODER BY 칼럼명 [ASC 또는 DESC] -> ASC : 조회한 데이터를 오름차순으로 정렬한다.(기본 값이므로 생략 가능) -> DESC : 조회한 데이터를 내림차순으로 정렬한다. Caution. - Oracle에서는 NULL값을 가장 큰 값으로 취급하지만 SQL에서는 가장 작은 값으로 취급한다. - 기본적인 정렬 순서는 오름차순(ASC)이다. - 숫자형 데이터 타입은 오름차순으로 정렬했을 경우에 가장 작은 값부터 출력된..

[SQLD] GRORP BY, HAVING 절

Group By, Having 절 집계 함수(Aggregate Function) - 여러 행들의 그룹이 모여서 그룹당 단 하나의 결과를 돌려주는 함수이다. - GROUP BY 절은 행들을 소그룹화 한다. - SELECT 절, HAVING 절, ORDER BY 절에서 사용할 수 있다. 집계 함수 명 ( [DISTINCT | ALL] 칼럼이나 표현식 ) - ALL : Default 옵션이므로 생략 가능함. - DISDINCT : 같은 값을 하나의 데이터로 간주할 때 사용하는 옵션이다. 집계 함수의 종류 집계 함수 사용 목적 COUNT( * ) NULL 값을 포함한 행의 수를 출력한다. COUNT( 표현식 ) 표현식의 값이 NULL값인 것을 제외한 행의 수를 출력한다. SUM( [DISTINCT | ALL ]..

[SQLD] 함수(Function)

함수(Function) 함수 조직도 Infotance. 함수는 입력되는 값이 아무리 많아도 출력은 하나만 된다는 M:1 관계라는 중요한 특징을 가지고 있다. 단일행 함수의 종류 종류 내용 문자형 함수 문자를 입력하면 문자나 숫자 값을 반환한다. 숫자형 함수 숫자를 입력하면 숫자 값을 반환한다. 날짜형 함수 DATE 타입의 값을 연산한다. 변환형 함수 문자, 숫자, 날짜형 값의 데이터 타입을 변환한다. NULL 관련 함수 NULL을 처리하기 위한 함수 일단 큼지막 하게 대충 알아보고 아래에 상세하게 알아보자. 단일행 함수의 중요 특징 - SELECT,WHERE,ORDER BY 절에 사용 가능하다. - 각 행(Row)들에 대해 개별적으로 작용하여 데이터 값들을 조작하고, 각각의 행에 대한 조작 결과를 리턴한..

[SQLD] WHERE

WHERE WHERE 절 - 두 개 이상의 테이블에 대한 Join 조건을 기술하거나 결과를 제한하기 위한 조건을 기술 할 때. SELECT 칼럼명 FROM 테이블명 WHERE 조건식; - WHERE 절은 FROM 절 다음에 위치한다. - Column명은 보통 조건식의 좌측에 위치한다. - 비연산자 - 문자, 숫자, 표현식 (보통 조건식의 우측에 위치) - 비교 칼럼명(Join 사용 시) 연산자 종류 비교연산자나 논리 연산자는 아실거라고 생각하고 이 2개는 빼고 서술하겠습니다. 연산자의 종류 구분 연산자 연산자 의미 SQL 연산자 Between A and B A와 B의 값 사이에 있으면 된다. (A와 B값 포함) IN (list) List에 있는 값 중에서 어느 하나라도 일치하면 된다. Like '문자열'..

[SQLD] TCL (Transaction Control Language)

TCL(TraTransaction Control Language) Transaction(트랜잭션) - 데이터베이스의 논리적 연산단위 - 밀접히 관련되어 분리될 수 없는 한 개 이상의 데이터베이스 조작 - 하나의 트랜잭션에는 하나 이상의 SQL 문장이 포함된다. - 분할할 수 없는 최소의 단위 - 그렇기 때문에 전부 적용하거나 전부 취소한다. - All Or Nothing의 개념 * 올바르게 반된 데이터를 데이터베이스에 반영시키는 것(COMMIT) * 트랜잭션 시작 이전의 상태로 되돌리는 것(ROLLBACK) * 저장점기능(SAVEPOINT) 트랜잭션의 특성 특성 설명 원자성 트랜잭션에서 정의된 연산자들은 모두 성공적으로 실행되던지 아니면 전혀 실행되지 않은 상태로 남아 있어야 한다.(All or Noth..

[SQLD] DML(Data Manipulation Language)

DML(Data Manipulation Language) DML(Data Mainpulation Language) -> 데이터 조작어 -> 테이블에 관리하기를 원하는 자료들을 입력, 수정, 삭제, 조회하는 명령어들 자 일단 시작하기 전에 이번 챕터를 같이 해줄 제가 미리 만들어놓은 테이블을 소개합니다 CREATE TABLE `my_contacts` (`last_name` varchar(30) , `first_name` varchar(20) , `email` varchar(50) , `gender` char(1), `birthday` date , `profession` varchar(50), `location` varchar(50), `status` varchar(20), `interests` varcha..

[SQLD] DDL(Data Definition Language)

DDL(Data Definition Language) -> 데이터 정의어 데이터 유형 -> 데이터베이스의 테이블에 특정 자료를 입력할 때, 그 자료를 받아들일 공간을 자료의 유형별로 나누는 기준 -> 특정 칼럼을 정의할 때 선언한 데이터 유형은 그 칼럼이 받아들일 수 있는 자료의유형을 규정함. -> 선언한 유형이 아닌 다른 종류의 데이터가 들오려고 하면 에러가 발생됨 자주 쓰이는 데이터 유형 데이터 유형 설명 CHAR(number) - 고정길이 문자열 정보 - number는 기본 길이 1바이트 - number만큼 최대 길이를 갖고 고정 길이를 가지고 있으므로 할당된 변수 값의 길이가 number보다 작을 경우에는 그 차이 길이만큼 빈 공간으로 채워짐 VHARCHAR(number) - 가변 길이 문자열 정..

[SQLD] 관계형 데이터베이스 개요

관계형 데이터베이스 개요 데이터베이스 - 넓은 의미에서는 일상적인 정보들을 모아 놓은 것 자체를 의미 - 특정 기업이나 조직 또는 개인이 필요에 의해 데이터를 일정 형태로 저장해 놓은 것 관계형 데이터베이스 - 정규화를 통한 합리적인 테이블 모델링을 통해 이상(Anomaly)현상을 제거하고 데이터 중복을 피할 수 있으며, 동시성 관리, 병행 제어를 통해 많은 사용자들이 동시에 데이터를 공유 및 조작할 수 있는기능을 제공함 - 메타 데이터를 총괄 관리할 수 있기 때문에 데이터의 성격, 속성 또는 표현 방법 등을 체계화할 수있고, 데이터 표준화를 통한 데이터 품질을 확보할 수 있는 장점이 있다. SQL(Struct Query language) - 관계형 데이터베이스에서 데이터 정의, 데이터 조작, 데이터 제..

[SQLD] 분산 데이터베이스와 성능

분산데이터베이스 분산 데이터베이스 - 여러 곳으로 분산되어있는 데이터베이스를 하나의 가상 시스템으로 사용할 수 있도록 한 DB - 논리적으로 동일한 시스템에 속하지만, 컴퓨터 네트워크를 통해 물리적으로 분산되어 있는 데이터들의 모임. 물리적 Site 분산, 논리적으로 사용자 통합·공유 Therefore. 분산 데이터베이스는 데이터베이스를 연결하는 빠른 네트워크 환경을 이용하여 데이터베이스를 여러 지역 여러 노드로 위치시켜 사용성/성능 등을 극대화 시킨 데이터베이스라고 정의할 수 있다. 분산 데이터베이스의 6가지 투명성 * 분할 투명성(단편화) : 하나의 논리적 Relation이 여러 단편으로 분할되어 각 단편의 사본이 여러Site에 저장 * 위치 투명성 : 사용하려는 데이터의 저장 장소 명시 불필요. 위..

[SQLD] 데이터베이스 구조와 성능

데이터베이스 구조와 성능 슈퍼/서브타입 데이터 모델 - 최근 데이터 모델링을 할 때 자주 쓰이는 모델링 방법. - 데이터의 특징을 공통과 차이점의 특징을 고려하여 효과적으로 표현할 수 있기 때문. - 공통의 부분을 슈퍼타입으로 모델링하고 공통으로부터 상속받아 다른 엔터티와 차이가 있는 속성에 대해서는 별도의 서브엔터티로 구분하여 업무의 모습을 정확하게 표현하면서 물리적인 데이터모델로 변환을 할 때 선택의 폭을 넓힐 수 있는 장점이 있다. - 논리적인 데이터 모델에서 이용되는 형태이고 분석단계에서 많이 쓰이는 모델이다. 슈퍼/서브타입에 대한 변환을 잘못하면 성능이 저하되는 이유 1) 트랜잭션은 항상 일괄로 처리하는데 테이블은 개별로 유지되어 Union연산에 의해 성능이 저하될 수 있다. 2) 트랜잭션은 항..

[SQLD] 대량 데이터에 따른 성능

대량 데이터 발생에 따른 성능 대량 데이터 발생에 따른 테이블 분할 개요 - 일의 처리되는 양이 한군데에 몰리는 현상은 어떤 업무에 있어서 중요한 업무에 해당되는 데이터가 특정 테이블에 있는 경우에 발생이 되는데 이런 경우 트랜잭션이 분산 처리 될 수 있도록 테이블단 위에서 분할의 방법을 적용할 필요가 있다. - 대량의 데이터가 존재하는 테이블에 많은 트랜잭션이 발생하여 성능이 저하되는 테이블 구조에 대해 수평/수직 분할에 의한 성능향상을 볼 수 있다. * 하나의 테이블에 대량의 데이터가 존재하는 경우 - 인덱스의 Tree 구조가 너무 커져 효율성이 떨어져 데이터를 처리(입력, 수정, 삭제, 조회)할 때 디스크 I/O를 많이 유발하게 된다. * 한 테이블에 많은 수의 칼럼이 존재하는 경우 - 데이터가 디..

[SQLD] 반정규화와 성능

반정규화 반정규화 - 정규화된 엔터티, 속성, 관계에 대해 시스템의 성능향상과 개발과 운영의 단순화를 위해 중복, 통합, 분리 등을 수행하는 데이터 모델링의 기법을 의미한다. - 데이터베이스서버가 분리 되어 분산데이터베이스가 구성되어 있을 때 반정규화를 통해 성능을 향상시킬 수 있다. * 협의의 반정규화 - 데이터를 중복하여 성능을 향상시키기 위한 기법이라고 정의할 수 있다. * 넓은 의미의 반정규화 - 성능을 향상시키기 위해 정규화된 데이터 모델에서 중복, 통합, 분리 등을 수행하는 모든과정. Because. 데이터를 조회할때 디스크 I/O량이 많아서 성능이 저하되거나 경로가 너무 멀어 조인으로 인한 성능저하가 예상되거나 칼럼을 계산하여 읽을 때 성능이 저하될 것이 예상되는 경우 반정규화를 수행하게 된..

[SQLD] 정규화와 성능

정규화란? - 데이터를 결정하는 결정자에 의해 함수적 종속을 가지고 있는 일반속성을 의존자로 하여 입력/수정/삭제 이상을 제거하는 것이다. - 데이터의 중복속성을 제거하고 결정자에 의해 동일한 의미의 일반속성이 하나의 테이블로 집약되므로 한 테이블의 데이터 용량이 최소화되는 효과가 있다. - 일반적으로 정규화를 수행해야 데이터처리의 성능이 향상되며 데이터의 조회처리 트랜잭션시에 성능저하가 나타날 수 있음. - 데이터를 원자적으로 만드는 것이 테이블을 정규화 하는 첫 단계이다. Therefore - 일반적으로 정구화가 잘 되어있으면 입력/수정/삭제의 성능이 향상되고 반정규화를 하면 조회의 성능이 향상된다고 인식 할 수 있다. - but! 데이터 모델링을 할 때 반정구화만이 조회 성능을 향상시킨다는 고정관념..

[SQLD] 성능 데이터 모델링의 개요

성능데이터 모델링 성능 데이터 모델링 이란?! - 데이터베이스 성능향상을 목적으로 설계단계의 데이터 모델링 때부터 정규화, 반정규화, 테이블 통합, 테이블 분할, Join 구조, PK, FK, 등 여러 가지 성능과 관련된 사항이 데이터 모델링에 반영 될 수 있도록 하는 것으로 정의할 수 있다. 가능 방안 - 정규화를 통해서 수행. - 인덱스의 특징을 고려해서 칼럼의 순서도 변형 가능 - 대량의 데이터 특성에 따라 비록 정규화된 모델이라도 테이블을 수직 또는 수평분할하여 적용. - 논리적인 테이블을 물리적인 테이블로 전환할 때 데이터 처리의 성격에 따라 변환하는 방법. 성능 데이터 모델링 고려사항 1) 데이터 모델링을 할 때 정규화를 정확하게 수행한다. - 정규화된 모델이 데이터를 주요 관심사 별로 분산시..

[SQLD] 데이터 모델링관점과 분류

데이터 모델링 관점과 분류 정보 시스템을 모델링할 때 세 관점 * 데이터 관점 - 업무가 어떤 데이터와 관련이 있는지 또는 데이터간의 관계는 무엇인지에 대해서 모델링 하는 방법(What, data) * 프로세스 관점 - 업무가 실제하고 있는 일은 무엇인지 또는 무엇을 해야하는지를 모델링하는 방법(How,Process) * 데이터와 프로세스의 상관관점 - 업무가 처리하는 일의 방법에 따라 데이터는 어떻게 영향을 받고 있는지 모델링 하는 방법 (Interaction), (상호 연관성 파악) 데이터 모델링의 세 가지 요소 1) 업무가 관여하는 어떤 것(Things) 2) 어떤 것이 가지는 성격(Attributes) 3) 업무가 관여하는 어떤 것 간의 관계(Relationships) 발생시점에 따른 엔터티의 분..

[SQLD] 식별

식별자란(Identifiers) 식별자란?! - 식별자의 개념을 알기 위해선 일단은 엔터티와 인스턴스의 개념을 명확히 알고있어야한다. - 엔터티 -> 인스턴스들의 집합. - 여러 개의 집합체를 담고 있는 하나의 통에서 각각을 구분할 수 있는 논리적인 이름이 필요하다. 이로인해 생긴 개념이 식별자이다. - 하나의 엔터티에 구성되어 있는 여러 개의 속성 중에 엔터티를 대표할 수 있는 속성을 의미하며 하나의 엔터티는 반드시 하나의 유일한 식별자가 존재해야한다. - 식별자는 업무적으로 구분이 되는 정보로 논리데이터 모델링 단계에서 사용한다. - 엔터티내에서 인스턴스들을 구분할 수 있는 구분자. 특징 * 주식별자 특징 특징 내용 비고 유일성 주 식별자에 의해 엔터티 내에 모든 인스턴스들을 유일하게 구분한다. Ex..

반응형