• 검색 결과가 없습니다.

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

참조

관련 문서

[r]

Label 객체 역시 버튼 객체와 같이 몇 가지 다른 종류의 생성 자 함수를 제공하고 있는데 Label 없이 생성하려는 경우 인 수 없는 Label() 생성자를 사용하고 처음부터

과제물을 제출하였어도 표지만 제출한 경우, 파일이 깨져서 보이는 경우, 암호설정을 하여 열어볼 수 없는 경우, 접수번호는 있지만 실제 파일이 없는 경우에는

1) 발레전공 부문이 미달되거나 충원할 수 없는 경우 한국무용전공 부문, 현대무용전공 부문 순으로 선발 2) 한국무용전공 부문이 미달되거나 충원할 수 없는

• Pathology.. 출처: American Joint Committee on Cancer staging system for thyroid cancers using the TNM classification. Harrison 18 th Edition.. Postsurgical hypoparathyroidism.

인증서 확인 서버의 URL 확인 Session key 생성 Session key 암호화.

● 프린터가 자동 응답기, 컴퓨터 다이얼업 모뎀 또는 다중 포트 전환기와 같은 전화 장치와 동일한 전화 회 선을 사용하는 경우 팩스 신호가 작아질 수

• 선형계획법(Linear Programming; LP)이란, 여러 개의 제한된 자원이 존 재하는 경우에 특정 목적(이익최대화 또는 비용최소화)을 달성하고자 하 는 경영자의