목록문송한 회사생활/SQL 공부 (66)
최보름달
![](http://i1.daumcdn.net/thumb/C150x150.fwebp.q85/?fname=https://blog.kakaocdn.net/dn/GS9bi/btqG68b9VwE/5LcdyCvXNPGrR32cIaMLE1/img.png)
오라클에서 제공하는 연습 사이트가 있다. https://livesql.oracle.com/ Oracle Live SQL livesql.oracle.com 여기서 회원가입을 하면 연습을 해볼 수 있다. 홈화면에서 start coding now 를 선택하면 쿼리를 날려볼 수 있는데... 하지만 첫 가입한 상태에는 아무런 테이블도 없기 때문에 code library 에서 이미 만들어둔 쿼리를 수행시켜서 테스트를 해볼 수 있다. 예를들면 아래 화면에서 EMP and DEPT 테이블 선택하면 이런식으로 create table 과 insert 데이터까지 쿼리가 작성이 되어 있으니까, run script 를 누르면 쿼리가 실행되어 emp 와 dept 테이블을 조회할 수 있다. sql worksheet 에서 run 버..
NL JOIN 외부에 있는 테이블을 선행 테이블 또는 외부테이블이라 하고, 반복문 내부에 있는 테이블을 후행 테이블 또는 내부 테이블 이라고 한다. NL 조인은 프로그래밍에서 사용하는 중첩된 반복문과 유사한 방식으로 조인을 수행한다. FOR 선행 테이블 읽음 -> 외부 테이블 FOR 후행 테이블 읽은 -> 내부 테이블 (선행 테이블과 후행 테이블을 조인) NL 조인은 랜덤 방식으로 데이터를 액세스 하기 때문에 처리 범위가 좁은게 유리하다. NL JOIN 의 작업 방법 선행 테이블에서 주어진 조건을 만족하는 행을 찾음 선행 테이블의 조인 키 값을 가지고 후행 테이블에서 조인 수행 선행 테이블의 조건을 만족하는 모든 행에 대해 1번 작업 반복 수행 HASH JOIN 해슁 기법을 이용하여 조인을 수행한다. 조..
전체 테이블 스캔 테이블에 존재하는 모든 데이터를 읽으면서 조건에 맞으면 결과로 추출하고, 조건에 맞지 않으면 버리는 방식 모든 결과를 찾을 때까지 시간이 오래 걸릴 수 있다. 옵티마이저가 전체 테이블 스캔을 하는 이유는 다음과 같다. SQL문에 조건이 존재하지 않는 경우 : 테이블에 존재하는 모든 데이터가 답이 되는 경우를 의미한다. SQL문에 주어진 조건에 사용 가능한 인덱스가 존재하지 않는 경우 : 인덱스가 없다면 데이터 액세스 가능한 방법은 모든 테이블의 데이터를 읽는 방법 뿐이다. 또한, 주어진 조건에 사용 가능한 인덱스는 존재하지만 함수를 사용해서 컬럼을 변경한 경우에도 인덱스 사용이 불가하다. 옵티마이저 취사 선택 : 조건을 만족하는 데이터가 많은 경우, 인덱스가 존재해도 전체 테이블 스캔을..
![](http://i1.daumcdn.net/thumb/C150x150.fwebp.q85/?fname=https://blog.kakaocdn.net/dn/bdWOhg/btqG6fWoVjw/iE6Q0vujTQWFExQz0t65ZK/img.png)
인덱스 특징과 종류 인덱스는 원하는 데이터를 쉽게 찾을 수 있도록 돕는 책의 찾아보기와 유사한 개념이다. 인덱스의 목적은 검색 성능의 최적화이다. 단, 인덱스를 생성하면 DML(insert, update, delete 등)은 느려진다. 가. 트리 기반 인덱스 (B-트리 인덱스) DBMS 에서 가장 일반적인 인덱스는 B-트리 인덱스이다. B-트리 인덱스는 브랜치 블록과 리프 블록으로 구성된다. 브랜치 블록 중 가장 상위에 있는 블록을 루트 블록이라고 한다. 브랜치 블록은 분기를 목적으로 하는 블록이다. 리프 블록은 가장 아래 단계에 존재한다. 리프 블록은 인덱스를 구성하는 컬럼의 데이터와 해당 데이터를 가지고 있는 행의 위치를 가리키는 레코드 식별자(RID, Record Identifier/ Rowid) ..
![](http://i1.daumcdn.net/thumb/C150x150.fwebp.q85/?fname=https://blog.kakaocdn.net/dn/U4Wu5/btqG6IYjskc/N2BKznAgOPMJKKGwIZgi91/img.png)
옵티마이저 실행계획 실행계획을 생성한다는 것은 SQL을 어떤 순서로 어떻게 실행할 지를 결정하는 작업이다. 동일한 SQL에 대해 결과를 낼 수 있는 다양한 처리 방법(실행계획)이 존재할 수 있지만 각 처리 방법마다 실행 시간(성능)은 서로 다를 수 있다. 옵티마이저는 다양한 처리 방법 중에서 가장 효율적인 방법을 찾아준다. 실행계획을 구성하는 요소 조인 순서(join order) : 조인 작업을 수행할 때 참조하는 테이블 순서 조인 기법(join method) : 두 개의 테이블을 조인할 때 사용할 수 있는 방법. NL JOIN, HASH JOIN, SORT MERGE JOIN 등이 있다. 액세스 기법(access method) : 하나의 테이블을 액세스 할 때 사용할 수 있는 방법. 인덱스를 이용하여 ..
옵티마이저 최적화를 의미한다. 사용자가 질의한 SQL에 대해 최적의 실행 방법을 결정하는 역할을 한다. 최적의 실행 방법을 결정하는 방식에는 크게 두가지가 있다. 규칙기반 옵티마이저 비용기반 옵티마이저 대부분은 비용기반 옵티마이저만 제공한다. 규칙기반 옵티마이저 규칙, 우선순위를 가지고 실행계획을 생성하는 옵티마이저. 우선순위가 정해져 있고, 이 우선순위를 기반으로 실행계획을 생성한다. 인덱스, 조인이 중요한 판단 기준이 된다. 순위 기법 설명 1 single row by rowid 테이블에서 하나의 행을 액세스 하는 방법. rowid 는 행이 포함된 데이터 파일, 블록 등의 정보를 가지고 있기 때문에 다른 정보를 참조하지 않도고 바로 원하는 행을 액세스 할 수 있다. 하나의 행을 액세스 하는 가장 빠른..
Procedure 생성 예제 SCOTT 유저가 소유하고 있는 DEPT 테이블에 새로운 부서를 등록하는 프로시저 만드는 예제 SCOTT 유저가 소유한 DEPT 테이블의 구조는 다음과 같음. 컬럼 타입 길이 인덱스 DEPTNO NUMBER 2 PK DNAME VARCHAR2 14 LOC VARCHAR2 13 오라클 CRAETE OR REPLACE procedure p_DEPT_insert ---- (1) (v_DEPTNO in number, v_dname in varchar2, v_loc in varchar2, v_result out varchar2) IS cnt number := 0; BEGIN ---- (2) SELECT COUNT(*) INTO CNT FROM DEPT WHERE DEPTNO = v_D..
절차형 SQL 절차형 SQL 을 이용하면 SQL문의 연속적인 실행이나 조건에 따른 분기처리를 이용하여 특정 기능을 수행하는 저장 모듈을 생성할 수 있다. DBMS별로 제공하는 절차형 SQL 오라클 : PL(Procedural language)/SQL sql server : T-SQL 오라클 PL/SQL 오라클의 PL/SQL은 block 구조로 되어있다. block 내에는 DML 문장과 쿼리 문장, 절차형 언어(IF, LOOP) 등을 사용할 수 있다. PL/SQL 을 이용하면 다양한 저장 모듈을 개발할 수 있다. 저장 모듈이란 PL/SQL 문장을 데이터베이스 서버에 저장해서 사용자와 애플리케이션 사이에서 공유할 수 있도록 만든 일종의 SQL 컴포넌트 프로그램이다. (독립적으로 실행될 수 있는 실행 프로그램..
![](http://i1.daumcdn.net/thumb/C150x150.fwebp.q85/?fname=https://blog.kakaocdn.net/dn/bvFKQc/btqGJHsdQmt/EhC1Echliepr7niIwMwikK/img.png)
DCL 유저를 생성하고 권한을 제어할 수 있는 명령어 유저와 권한 다른 부서 간, 다른 회사 간 데이터를 공유하기 위해 DB를 오픈해야 하는 경우, 새로운 유저를 생성하고 생성한 유저에게 공유할 테이블이나 기타 오브젝트에 대한 접근 권한만을 부여하면 된다. 대부분 데이터베이스에서는 데이터 보호와 보안을 위해 유저와 권한을 관리하고 있다. 오라클에서 기본적으로 제공되는 유저는 SCOTT, SYS, SYSTEM 이 있다. SCOTT : 오라클 테스트용 샘플 유저. 디폴트 패스워드: TIGER SYS : DBA 롤을 부여받은 유저 SYSTEM : 데이터베이스 모든 시스템 권한을 부여받은 DBA 유저. 오라클 설치 롸욜 시에 패스워드를 설정한다. 오라클과 sql server는 사용자에 대한 아키텍처가 많이 다르..
WINDOW FUNCTION 개요 행과 행 간의 관계를 쉽게 정의하기 위해 만든 함수가 윈도우 함수다. 윈도우 함수는 분석 함수나 순위 함수로도 알려져 있다. 윈도우 함수는 기존에 사용하던 집계 함수도 있고, 새로이 윈도우 함수 전용으로 만들어진 기능도 있다. 윈도우 함수는 다른 함수와 달리 중첩해서 사용은 못하지만, 서브쿼리에는 사용할 수 있다. WINDOW FUNCTION 종류 WINDOW FUNCTION 는 크게 5가지 그룹으로 분류할 수 있다. (벤더별로 지원하는 함수 차이가 있음) 그룹 내 순위(RANK) 관련 함수: RANK, DENSE_RANK, ROW_NUMBER 그룹 내 집계(AGGREGATE) 관련 함수 : SUM, MAX, MIN, AVG, COUNT (sql server는 OVER ..