• 검색 결과가 없습니다.

4장 SQL 고급(2)

N/A
N/A
Protected

Academic year: 2022

Share "4장 SQL 고급(2)"

Copied!
24
0
0

로드 중.... (전체 텍스트 보기)

전체 글

(1)

4장 SQL 고급(2)

데이터베이스 연구실

1

(2)

[목 차]

4.2 뷰

4.2.1 뷰의 생성

4.2.2 뷰의 수정 삭제 4.3 인덱스

4.3.1 인덱스와 B-TREE 4.3.2 인덱스의 생성 4.3.3 인덱스의 관리

2

[목 차]

4.2 뷰

4.2.1 뷰의 생성

4.2.2 뷰의 수정 삭제 4.3 인덱스

4.3.1 인덱스와 B-TREE

4.3.2 인덱스의 생성

4.3.3 인덱스의 관리

(3)

} 정의

} 하나 이상의 테이블에서 원하는 데이터를 가져와서 하나의 테이블처럼 사용할 수 있도록 만든 가상의 테이블

} 실제 존재하는 테이블이 아닌 여러 테이블에서 파생(가공)된 정보를 하나의 테이블처럼 볼 수 있게 만든 SQL문

4.2 뷰

고객판매현황 뷰

고객테이블

고객명, 연락처

판매테이블

고객명,주문번호, 주문액

고객판매현황 뷰

고객명,연락처,주문번호,주문액

3

(4)

} 목적

} 편리성

} 사용자에게 편의성을 제공

} 사용자가 필요한 정보만을 요구에 맞게 제공

} 일반 사용자들은 일반 테이블처럼 사용 가능

} 재사용성

} 자주 사용되는 쿼리를 미리 정의

} 보안성

} 각 사용자 별로 필요한 데이터만 선별하여 보여줄 수 있음

} 목적

} 편리성

} 사용자에게 편의성을 제공

} 사용자가 필요한 정보만을 요구에 맞게 제공

} 일반 사용자들은 일반 테이블처럼 사용 가능

} 재사용성

} 자주 사용되는 쿼리를 미리 정의

} 보안성

} 각 사용자 별로 필요한 데이터만 선별하여 보여줄 수 있음

4

(5)

4.2.1 뷰의 생성

CREATE VIEW 뷰이름 (컬럼) [WITH ENCRYPTION]

AS

SELECT …

FROM … WHERE … [WITH CHECK OPTION]

} 뷰이름 : 테이블과 마찬가지로 데이터베이스내의 유일한 이름지정

} 컬럼 : 뷰에서 보여질 컬럼이며 내부 SELECT 문과 1:1, SQL에 정의가 되어있으면 생략가능

} WITH ENCRYPTION : 내부 SQL문의 암호화, 함부로 정의를 볼 수 없음

} WITH CHECK OPTION : 뷰를 통한 자료 변경시 지켜야 할 조건 지정

5

} 뷰이름 : 테이블과 마찬가지로 데이터베이스내의 유일한 이름지정

} 컬럼 : 뷰에서 보여질 컬럼이며 내부 SELECT 문과 1:1, SQL에 정의가 되어있으면 생략가능

} WITH ENCRYPTION : 내부 SQL문의 암호화, 함부로 정의를 볼 수 없음

} WITH CHECK OPTION : 뷰를 통한 자료 변경시 지켜야 할 조건 지정

(6)

} 생성조건

} 사용자는 뷰의 정의에서 사용되는 객체들에 대한 SELECT 권한을 가지고 있어야만 함

} 정의에서 사용되는 SELECT문은 SELECT 구문에 top이 사용될 경우 ORDER BY사용가능하며 그 외 SELECT INTO, ORDER BY, COMPUTE, COMPUTE BY 문을 사용할 수 없음

} 임시 테이블을 대상으로 생성할 수 없음

} 생성조건

} 사용자는 뷰의 정의에서 사용되는 객체들에 대한 SELECT 권한을 가지고 있어야만 함

} 정의에서 사용되는 SELECT문은 SELECT 구문에 top이 사용될 경우 ORDER BY사용가능하며 그 외 SELECT INTO, ORDER BY, COMPUTE, COMPUTE BY 문을 사용할 수 없음

} 임시 테이블을 대상으로 생성할 수 없음

6

(7)

생성

7

(8)

테이블처럼 사용

8

(9)

} 뷰의 사용 중 컬럼의 변경, 추가나 SQL문장의 변경이 생길 경우 수정이 필요하며 이때는 ALTER 명령을 사용

4.2.2 뷰의 수정 삭제

ALTER VIEW 뷰이름 AS

SELECT 문 ...

9

ALTER VIEW 뷰이름 AS

SELECT 문 ...

(10)

수정 후

주문(OCNT) 수량 컬럼으로 조회가능

10

(11)

} 뷰를 더 이상 사용할 필요가 없을 경우는 DROP 명령으로 삭제

DROP VIEW 뷰이름

11

(12)

4.3 인덱스

} 인덱스(index)

} 테이블에 대한 검색 시 속도를 높여주기 위해 사용되는 자료 구조

} 일반적으로 B-TREE 의 구조를 가짐

인덱스 테이블

12

검색

SELECT 이름 FROM 고객 WHERE 전화번호=‘1004’

김철수 1002 심철수 1005 나미인 1004 이영수 1001 김철수 1002 심철수 1005 나미인 1004 이영수 1001 1001

1002 1003 1004

….

인덱스 테이블

(13)

4.3.1 인덱스와 B-TREE

} B-트리

} 데이터베이스와 파일 시스템에서 널리 사용되는 트리자료구조의 일종

} 자료를 정렬된 상태로 보관

} 루돌프 바이어에 의해 창시

13

(14)

} 인덱스의 특징

} 테이블의 컬럼 (한 개, 또는 여러 개)을 이용하여 생성

} 빠른 검색과 함께 효율적인 레코드 접근이 가능하게 함

} 테이블의 저장 공간에 비해 작은 공간 차지 (순서대로 정리된 자료와 물리적 위치만 보유)

} 테이블의 부분집합

} 일반적으로 B-TREE 형태의 구조를 가짐

} 데이터 정렬된 형태로 저장됨 4.3.2 인덱스의 생성

} 인덱스의 특징

} 테이블의 컬럼 (한 개, 또는 여러 개)을 이용하여 생성

} 빠른 검색과 함께 효율적인 레코드 접근이 가능하게 함

} 테이블의 저장 공간에 비해 작은 공간 차지 (순서대로 정리된 자료와 물리적 위치만 보유)

} 테이블의 부분집합

} 일반적으로 B-TREE 형태의 구조를 가짐

} 데이터 정렬된 형태로 저장됨

14

(15)

} 생성시 고려사항

} WHERE 절에 자주 나오는 컬럼을 대상

} 조인이 자주 일어나는 경우 조인되는 컬럼을 대상

} 인덱스에 NULL은 저장되지 않으므로 NULL 많은 컬럼 유리

} 하나의 테이블의 인덱스가 많으면 속도가 느려질 수 있음

} 보통 테이블당 4~5개 정도 권장

(시스템의 HW성능 등에 따라 유동적)

} 생성시 고려사항

} WHERE 절에 자주 나오는 컬럼을 대상

} 조인이 자주 일어나는 경우 조인되는 컬럼을 대상

} 인덱스에 NULL은 저장되지 않으므로 NULL 많은 컬럼 유리

} 하나의 테이블의 인덱스가 많으면 속도가 느려질 수 있음

} 보통 테이블당 4~5개 정도 권장

(시스템의 HW성능 등에 따라 유동적)

15

(16)

CREATE [UNIQUE] [CLUSTERED | NONCLUSTERED]

INDEX index_name ON table (column [,...n]) [WITH

[PAD_INDEX]

[[,] FILLFACTOR = fillfactor]

[[,] IGNORE_DUP_KEY]

[[,] DROP_EXISTING]

[[,] STATISTICS_NORECOMPUTE]

]

[ON filegroup]

} 검색형태

} 포인트 검색

} 특정한 자료를 대상으로 조회

} 범위 검색

} 자료의 범위를 대상으로 조회

16

CREATE [UNIQUE] [CLUSTERED | NONCLUSTERED]

INDEX index_name ON table (column [,...n]) [WITH

[PAD_INDEX]

[[,] FILLFACTOR = fillfactor]

[[,] IGNORE_DUP_KEY]

[[,] DROP_EXISTING]

[[,] STATISTICS_NORECOMPUTE]

]

[ON filegroup]

(17)

} 클러스터드 인덱스(clustered index)

} 한 테이블에 하나만 허용

} 데이터가 키 값에 따라 정렬

} 포인터 및 범위 검색 모두에 유리

} Primary Key 생성시 자동 생성

} 책의 목차

17

생성방법

CREATE CLUSTERED INDEX 인덱스명 ON 테이블명 ( 컬럼 ASC )

(18)

Customer 테이블의 Primary Key 인 custid의 경우 테이블생성시 clustered index가 생성 PK가 없을경우 정상수행

자동 생성된 경우 삭제할 수 없음

18

(19)

19

(20)

Clustered index를 사용하여 결과탐색을 확인할 수 있음

20

Clustered index를 사용하여 결과탐색을 확인할 수 있음

(21)

} 넌클러스터드 인덱스(nonclustered index)

} 테이블당 여러 개 생성가능 (약 240개)

} 데이터는 들어가 있는 순서대로 있음

} 대상 컬럼을 기준의 별도의 인덱스 페이지 생성

} 책의 색인 페이지

21

생성방법

create nonclustered index 인덱스명 on 테이블명(컬럼명 asc)

(22)

22

(23)

nonClustered index를 사용하여 결과탐색

Index Seek를 확인할 수 있음

23

nonClustered index를 사용하여 결과탐색

Index Seek를 확인할 수 있음

(24)

4.3.3 인덱스의 관리

} 인덱스 삭제

} 인덱스가 많을 경우 DB 성능에 영향을 미치므로 사용하지 않는 경우 삭제하여 주어야 함

24

참조

관련 문서