본문 바로가기

SQL

(11)
집계와 조건분기 집계 대상으로 조건 분기 -테이블 생성 CREATE TABLE Population( prefecture VARCHAR(32), sex CHAR(1), pop INTEGER, CONSTRAINT pk_pop PRIMARY KEY(prefecture, sex) ); -데이터 insert INSERT INTO Population VALUES('성남', '1', 60); INSERT INTO Population VALUES('성남', '2', 40); INSERT INTO Population VALUES('수원', '1', 90); INSERT INTO Population VALUES('수원', '2',100); INSERT INTO Population VALUES('광명', '1',100); INSERT IN..
Mysql Lock MySQL에서는 여러가지 종류의 락이 있다. 락은 쿼리 성능에도 많은 영향을 미치고 이러한 개념을 모른다면 쿼리 튜닝할때도 상당한 제약 사항이 있을것 같다. 그리하여 MYSQL에서 사용하는 락은 어떤것들이 있는지 정리해 본다. MYSQL엔진의 잠금 1. 글로벌락 - FLUSH TABLE WITH READ LOCK 명령으로만 획득 가능한데 실행과 동시에 서버에 존재하는 모든 테이블에 잠금을 건다. - MYSQL에서 제공하는 락 가운데 가장 범위가 큰 락이다. - 한 세션에서 글로벌 락을 획득한다면 다륵 세션에서 SELECT를 제외한 DDL DML문장을 실행하는 경우 글로벌 락이 해제될때 까지 대기 상태 2. 테이블락 : - 개별 테이블 단위로 설정되는 잠금이며, 명시적 또는 묵시적으로 특정 테이블 락을 획..
실행 계획 실행 계획이란? (1) 접근 경로의 이해 - SCAN : 데이터를 읽는 작업, SCAN을 수행하는 방식을 일컬어 접근경로 (ACCESS PATH)라 한다. FULL SCAN : 테이블의 전체 데이터를 읽어 조건에 맞는 데이터를 추출ROWID SCAN : ROWID를 기준으로 데이터를 추출하는 방식으로, 단일 행에 접근하는 방식 가운데서 가장 빠름INDEX SCAN: 원하는 데이터를 추출하기 위하여 인덱스를 사용하여 검색 INDEX SCAN의 종류 종류설명 INDEX UNIQUE SCANUNIQUE INDEX를 이용하여 필요한 데이터 블록을 접근하는 방식한 건이하의 ROWID를 반환하는 INDEX SCAN 방식 INDEX RANGE SCAN인덱스 이용하여 필요한 데이터 블록을 접근하는 방식 중 가장 일반적..
옵티마이저 옵티마이저란? - DBMS의 두뇌라고 할 수 있다. SOFT PASING -1. SQL 문법적 오류 검사2. SQL을 이전에 실행한 적이 있는지 메모리 검사3, 이전에 실행한 기록이 있으면 실행했던 방식으로 실행HARD PASING - 실행 계획이 없다면 SQL에서 사용하고 있는 객체들에 대한 접근권한이 있는지를 체크 후 어떤 방식으로 처리할 것인지 실행 계획을 세우는것. SQL 처리과정1. SQL문 사용자가 실행2. 데이터 딕셔너리 정보를 참조하여 SQL문에 대한 구문분석(Syntax와 Symantics)을 수행 이 결과를 파스-트리(Parse-Tree)라 한다.3. 파스트리는 옵티마이저에게 전달되고 옵티마이저에는 비용기반 또는 규칙기반을 선택함.4. 비용기반 옵티마이저에 의해 산출된 적정 플랜은 로우..
컬럼 속성(무결성 제약조건) 자. 무결성 제약 조건이란 무었인가를 가지고 한번 이야기 해보자. 영어로는 Integrity Constraints이다. 즉 한마디로 정의 하자면 데이터가 정확하게 들어가야 되는데 이것을 데이터 베이스에서 정확하게 데이터가 인입될수 있도록 제공 하는 기능이다. NULL - NULL은 컬럼의 속성 중 하나로 해당 컬럼이 NULL 값을 허용하는지 허용하지 않는지를 정해 줄 수 있 다. NULL 과 (' ')이 다른점은 NULL 은 NULL 값이고 공백은 SPACE 이다. UNIQUE - 테이블에 있는 데이터를 유일하게 식별하기 위한 무결성 제약 조건중 하나. CREATE TABLE unique_test ( uni_col1 VARCHAR(10) UNIQUE NOT NULL, uni_col2 VARCHAR(10)..
4.오라클 식구들(데이터베이스 객체) CREATE TABLE [구문형식] CREATE TABLE 테이블명 ( 컬럼 1 컬럼1타입, 컬럼 2 컬럼2타입, 컬럼2 컬럼3타입, .. ); 테이블의 이름은 임의의 단어로 구성되며 최대 30BYTE 까지 쓸 수 있다. 마찮가지로 컬럼명과 스키마 사용자 이름도 30BYTE까지 쓸수 있다. 또한 한 테이블에는 최대 255개까지 컬럼을 만들수 있다. 기본 데이터 타입 - 기본 데이터 타입은 크게 문자형 데이터, 숫자형 데이터, 날짜형 데이터 세 가지로 구분된다. 문자형 데이터 데이터 유형설명 길이 CHAR 고정길이 최대 크기 2000byte, 디폴트 값은 byte 값 size 디폴트 값은 1이다. VARCHAR2 가변 길이 반드시 size값 명시 최대크기 4000byte 디폴트 값은 byte,size값 생..
1부 3장. SQL 소개 SQL은 크게 DML과 DDL 두 가지로 구분된다. DML(데이터 조작어, Data Manipulation Language) - 데이터 추출, 저장, 삭제 등 데이터를 조작 DDL(데이터 정의어, Data Definition Language) - 데이터가 저장되는 테이블이나 각종 객체들을 생성 그렇다면 DML은... SELECT, INSERT, UPDATE, DELETE, COMMIT, ROLBACK 이 있다. SELECT[구문형식] SELECT 컬럼, 컬럼2, ... FROM 테이블1, 테이블2, ... WHERE 조건들; 머 이부분은 다 아는부분이라고 치고 넘어가도록 한다. INSERT1[구문형식] INSERT INTO 테이블명 (컬럼1, 컬럼2,...) VALUES (컬럼1 값, 컬럼2값,...) ..
쿼리 실행 절차 및 옵티마이저 종류 쿼리 실행 절차1. 사용자로부터 요청된 SQL 문장을 잘게 쪼개서 MYSQL 서버가 이해할 수 있는 수준으로 분리2. SQL 파싱 정보를 확인 하면서 어떤 테이블로 읽고 어떤 인덱스를 이용해 테이블을 읽을지 선택3. 두 번째 단계에서 결정된 테이블의 읽기 순서나 선택된 인덱스를 이용해 스토리지 엔진으로 부터 데이터를 가져옴. 두번째 단계는 첫 번째 단계에서 만들어진 파스트리를 참조하면서 다음과 같은 내용 처리 - 블필요한 조건의 제거 및 복잡한 연산의 단순화 - 여러 테이블의 조인이 있는 경우 어떤 순서로 읽을지 결정 - 각 테이블에 사용된 조건과 인덱스 통계정보를 이용해 사용할 인덱스 결정 - 가져온 레코드들을 임시 테이블에 넣고 다시 한번 가공해야 하는지 결정 옵티마이저 종류 - 비용기반 최적화(Co..