Yys@kangwon.ac.kr You YOungseok 데이터베이스 테이블 및 인덱스 yys@kangwon.ac.kr You YOungseok.

Slides:



Advertisements
Similar presentations
일정 관리 다이어리 제작 JSP Programming with a Workbook. 학습 목표  사용자의 일정을 관리할 수 있는 다이어리에 대하여 알아보자. JSP Programming with a Workbook2.
Advertisements

Make a Real DBA 오라클 저장 영역 구조 ㈜ 신한시스템즈 김 종 근김 종 근 김 종 근김 종 근.
데이터베이스 9주차 : 데이터베이스 설계 2교시 : 데이터베이스 설계(3)
PARK SUNGJIN Oracle 설치 PARK SUNGJIN
DB 프로그래밍 학기.
DB 프로그래밍 학기.
소리가 작으면 이어폰 사용 권장!.
오라클 입문.
MS-Access의 개요 1강 MOS Access 2003 CORE 학습내용 액세스 응용 프로그램은 유용한 데이터를
관계 대수와 SQL.
다양한 예제로 쉽게 배우는 오라클 SQL 과 PL/SQL
제 5 장 인덱스 생성 및 관리.
데이터 베이스 설계 및 실습 #1 - 오라클 설치 및 SQL 기본.
제 09 장 데이터베이스와 MySQL 학기 인터넷비즈니스과 강 환수 교수.
10장. 데이터베이스 보안과 권한 관리 데이터베이스 보안과 권한 관리
12장 데이터 읽기 일관성과 락.
SQL SQL 불펌하지 마세요!!!!!!!! 불펌 금지.
6장 Mysql 명령어 한빛미디어(주).
MySQL 및 Workbench 설치 데이터 베이스.
(개정판) 뇌를 자극하는 Red Hat Fedora 리눅스 서버 & 네트워크
11장. 데이터베이스 서버 구축과 운영.
14장 질의응답 한빛미디어(주).
kHS 데이터베이스 테이블 및 인덱스 kHS.
SQL*PLUS.
11 테이블 관리와 데이터 딕셔너리 데이터베이스 응용 프로젝트 개발 테이블 구조 변경 데이터 딕셔너리.
3장. 데이터베이스 구축의 전체 과정 미리 실습하기
테이블 : 데이터베이스를 구성하는 요소로 같은 성격에 정보의 집합체. 레코드 : 하나의 정보를 가지고 있는 컬럼의 집합체
5장 Mysql 데이터베이스 한빛미디어(주).
4장. 웹로직 서버상에서의 JDBC와 JTA의 운용
07 그룹 함수 그룹 함수의 개념 그룹 함수의 종류 데이터 그룹 생성 HAVING 절.
3.2 SQL Server 설치 및 수행(계속) 시스템 데이터베이스 master
13 인덱스 인덱스의 개념 인덱스의 구조 인덱스의 효율적인 사용 방법 인덱스의 종류 및 생성 방법 인덱스 실행 경로 확인
학습목표 학습목표 본 장은 데이터베이스를 조작하기 위한 SQL 문중에서 특별히 데이터베이스의 정의와 관련된 명령어인 DDL을 쿼리분석기를 사용하여 하나씩 실습을 통해서 학습한다. DDL 명령어로 데이터베이스 생성과 삭제, 테이블 생성, 수정, 삭제 등을 할 수 있다. 또한.
DB Backup/Recovery EXPORT / IMPORT.
18강. 데이터 베이스 - II JDBC 살펴보기 Statement객체 살펴보기 Lecturer Kim Myoung-Ho
17강. 데이터 베이스 - I 데이터 베이스의 개요 Oracle 설치 기본적인 SQL문 익히기
14 SQLite DB 활용 B A S I C 1 4_ 고객 등록과 조회 L A B 1 4_ 수정과 삭제를 포함하는 고객관리시스템 Advanced LAB 14_ 탭 메뉴의 고객관리시스템.
KHS JDBC Programming 4 KHS
다양한 예제로 쉽게 배우는 오라클 SQL 과 PL/SQL
5장 Mysql 데이터베이스 한빛미디어(주).
13 인덱스 인덱스의 개념 인덱스의 구조 인덱스의 효율적인 사용 방법 인덱스의 종류 및 생성 방법 인덱스 실행 경로 확인
You YoungSEok Oracle 설치 You YoungSEok
환경 설정 예제 데이터베이스 생성 - 그림 3.34의 SQL Server 관리 스튜디오 창의 왼쪽 영역의 데이터베
자바 5.0 프로그래밍.
CHAP 13. 방명록 만들기 실습.
13장 무결성 제약조건.
JDBC Lecture 004 By MINIO.
3장. SQL Server 2008 전체 운영 실습 및 DB와 프로그램의 연동
테이블 만들기 실습 목표 입력할 tableDB <실습1> SSMS에서 테이블 생성
기본적인 SELECT문 작성.
2장. 변수와 타입.
CHAP 21. 전화, SMS, 주소록.
문성우 SQL 실습 Part Ⅰ 문성우.
오라클 11g 보안.
14 뷰(View) 뷰의 개념 뷰 관리.
제 23 장 오라클에서 보안 기능.
Chapter 10 데이터 검색1.
멀티미디어시스템 제 5 장. 멀티미디어 데이터베이스 개념 IT응용시스템공학과 김 형 진 교수.
ER-관계 사상에 의한 관계데이터베이스 설계 충북대학교 구조시스템공학과 시스템공학연구실
Android -Data Base 윤수진 GyeongSang Univ. IT 1.
maria db JDBC PROGRAMMING 5
Mariadb 트랜잭션과 동시성 제어 장종원
웹과 모바일 홈페이지의 이해와 제작 [PHP / MYSQL] 게시판 만들기
Data Base Mysql.
CHAP 15. 데이터 스토리지.
14 뷰(View) 뷰의 개념 뷰 관리.
 6장. SQL 쿼리.
임시테이블과 테이블변수 SQLWorld Study Group - 최명환 -.
6 객체.
Ⅰ. 데이터베이스 정의 Ⅱ. MS SQL 서버 Ⅲ. 데이터베이스 인터페이스
Presentation transcript:

yys@kangwon.ac.kr You YOungseok 데이터베이스 테이블 및 인덱스 yys@kangwon.ac.kr You YOungseok

오라클 테이블 유형 힙 구조 테이블 인덱스 구조 테이블 인덱스 클러스터 테이블 해시 클러스터 테이블 중첩 테이블 임시 테이블 데이터가 추가 될 때 가장 적절한 빈 공간에 저장 CREATE TABLE에 의해 생성되는 기본적인 테이블 유형 정렬되지 않은 행들의 모임 인덱스 구조 테이블 기본 키(색인)에 따라 정렬된 순서로 저장 인덱스 클러스터 테이블 여러 테이블의 테이터가 동일한 블록에 저장될 수 있음 동일한 클러스터 키 값을 가지는 데이터는 함께 저장됨 클러스터 키는 B*트리 인덱스를 사용하여 만들어짐 해시 클러스터 테이블 중첩 테이블 임시 테이블 객체 테이블

힙 구조 테이블 기존 테이블 생성처럼 일반 CREATE TABLE 문을 사용하면 된다 CREATE TABLE Dept ( dept_no int, dept_name varchar(100) );

인덱스 구조 테이블 CREATE TABLE 시 PRIMARY KEY를 추가하고 구문 끝에 ORGANIZATION INDEX를 추가함 CREATE TABLE index_Dept ( dept_no int PRIMARY KEY, dept_name varchar(100) ) ORGANIZATION INDEX; ORA-01429 에러가 발생하면 TABLESPACE를 만들어야 함 CREATE TABLESPACE [테이블스페이스 명] DATAFILE [절대경로] SIZE [용량] AUTOEXTEND ON -- 자동 테이블스페이스 파일 추가 EXTENT MANAGEMENT LOCAL AUTOALLOCATE; 예시) CREATE TABLESPACE test_space DATAFILE ‘C:\DBP\TABLESPACE\test_space.DBF' SIZE 10M AUTOEXTEND ON -- 자동 테이블스페이스 파일 추가 EXTENT MANAGEMENT LOCAL AUTOALLOCATE; CREATE TABLE index_dept ( deptno int PRIMARY KEY , dept_name varchar(100)) ORGANIZATION INDEX OVERFLOW TABLESPACE test_space; -- 테이블 스페이스 명

테이블스페이스 데이터를 논리적으로는 테이블스페이스에 저장하고 물리적으로는 해당 테이블스 페이스와 연관된 데이터 파일(Data file)들에 저장한다. 데이터 파일(Data file)은 하나의 테이블스페이스에만 속한다. 테이블스페이스는 하나 이상의 데이터 파일(Data file)로 구성됩니다. 데이터 파일, 테이블스페이스와 스키마 객체의 관계

테이블스페이스의 논리적 구조 테이블스페이스는 논리적 데이터베이스 구조에서 가장 큰 상위의 단위 데이터 베이스: 테이블 스페이스 하나 이상 포함 테이블 스페이스 : 세그먼트가 하나 이상 포함 저장소(세그먼트): 논리적 블록으로 구성된 확장영역 블록: 읽기 및 쓰기 작업의 최소 단위 확장영역: 연속적 데이터블록으로 구성되며 세그먼트 저장 단위로 사용

인덱스 클러스터 구조 테이블 먼저 클러스터와 클러스터에 대한 인덱스를 만들어야 함 클러스터 상에 테이블을 생성 함 create cluster emp_dept_cluster (dept_no int) size 1000; create index emp_dept_cluster_idx on cluster emp_dept_cluster; 클러스터 상에 테이블을 생성 함 CREATE TABLE cluster_Dept ( dept_no int, dept_name varchar(100) ) cluster emp_dept_cluster(dept_no); 클러스터를 삭제 하는 법 DROP CLUSTER 클러스터 이름 [ INCLUDING TABLES ];

해시 클러스터 구조 테이블 인덱스 클러스터와 개념적으로 유사하지만, 해시 함수를 이용하는 점이 다르다. 인덱스 클러스터 구조와 마찬가지로 먼저 클러스터를 만듦 하지만 클러스터에 인덱스가 필요 없고 해시 함수를 위한 옵션들이 추가 됨 CREATE CLUSTER hash_cluster (hash_key int) HASHKEYS 10000 SIZE 256 SINGLE TABLE HASH IS hash_key 클러스터에 테이블을 추가하는 방법은 같다 CREATE TABLE Hash_Dept ( deptno int, dept_name varchar(100) ) CLUSTER hash_cluster(deptno); 클러스터 구조 테이블의 경우 조인 쿼리에 대해 높은 성능을 보인다

실습 #1 앞에서 만든 각 테이블 종류 별로 아래의 쿼리를 실행한 뒤 결과를 비교해 보자 DROP TABLE Dept; INSERT INTO Dept VALUES(1, 'A'); INSERT INTO Dept VALUES(3, 'C'); INSERT INTO Dept VALUES(2, 'B'); INSERT INTO Dept VALUES(5, 'E'); SELECT * FROM Dept; DELETE FROM Dept where dept_name = 'B'; INSERT INTO Dept values(4, 'D'); DROP TABLE Dept; CREATE TABLE Dept ( dept_no int, dept_name varchar(100) ); INSERT INTO Dept VALUES(1, 'A'); INSERT INTO Dept VALUES(3, 'C'); INSERT INTO Dept VALUES(2, 'B'); INSERT INTO Dept VALUES(5, 'E'); SELECT * FROM Dept; DELETE FROM Dept where dept_name = 'B'; INSERT INTO Dept values(4, 'D'); --------------------------------------------------------------- DROP TABLE index_Dept; CREATE TABLE index_Dept ( dept_no int PRIMARY KEY, ) ORGANIZATION INDEX; INSERT INTO index_Dept VALUES(1, 'A'); INSERT INTO index_Dept VALUES(3, 'C'); INSERT INTO index_Dept VALUES(2, 'B'); INSERT INTO index_Dept VALUES(5, 'E'); SELECT * FROM index_Dept; DELETE FROM index_Dept where dept_name = 'B'; INSERT INTO index_Dept values(4, 'D'); drop index emp_dept_cluster_idx; drop cluster emp_dept_cluster including tables; -- 테이블 동시 삭제 --drop table cluster_Dept; create cluster emp_dept_cluster (dept_no int) size 1000; create index emp_dept_cluster_idx on cluster emp_dept_cluster; CREATE TABLE cluster_Dept ( ) cluster emp_dept_cluster(dept_no); INSERT INTO cluster_Dept VALUES(1, 'A'); INSERT INTO cluster_Dept VALUES(3, 'C'); INSERT INTO cluster_Dept VALUES(2, 'B'); INSERT INTO cluster_Dept VALUES(5, 'E'); SELECT * FROM cluster_Dept; DELETE FROM cluster_Dept where dept_name = 'B'; INSERT INTO cluster_Dept values(4, 'D'); ----------------------------------------------------- drop cluster hash_cluster including tables; CREATE CLUSTER hash_cluster ( hash_key int ) HASHKEYS 10000 SIZE 256 SINGLE TABLE HASH IS hash_key; CREATE TABLE hash_Dept ( ) cluster hash_cluster(dept_no); INSERT INTO hash_Dept VALUES(1, 'A'); INSERT INTO hash_Dept VALUES(3, 'C'); INSERT INTO hash_Dept VALUES(2, 'B'); INSERT INTO hash_Dept VALUES(5, 'E'); SELECT * FROM hash_Dept; DELETE FROM hash_Dept where dept_name = 'B'; INSERT INTO hash_Dept values(4, 'D');

실습 #1 결과 힙 구조 테이블 인덱스 구조 테이블 인덱스 클러스터 구조 테이블 해시 클러스터 구조 테이블

실습 #1 테이블 삭제 DROP TABLE Dept; DROP TABLE index_Dept; DROP INDEX emp_dept_cluster_idx; DROP CLUSTER emp_dept_cluster INCLUDEING TABLES; -- 테이블 동시 삭제 --DROP TABLE cluster_Dept; DROP CLUSTER hash_cluster INCLUDEING TABLES;

실습 #2 아래 테이블을 각 테이블 종류 별로 만드세요 다음 코드를 이용하여 각 테이블에 테스트용 데이터를 삽입 EMPNO EMP, INDEX_EMP, CLUSTER_EMP, HASH_EMP DEPT, INDEX_DEPT, CLUSTER_DEPT, HASH_DEPT 다음 코드를 이용하여 각 테이블에 테스트용 데이터를 삽입 EMPNO EMP_NAME SALARY DEPTNO INT VARCHAR(100) DEPTNO DEPT_NAME INT VARCHAR(100)

실습 #2 각 테이블 구조에 대한 다음 질의의 실행 플랜을 서로 비교하기 select * from emp where empno = 65000; select * from index_emp where empno = 65000; select * from cluster_emp where empno = 65000; select * from hash_emp where empno = 65000; 각 테이블 구조에 대한 다음 조인 질의의 실행 플랜을 서로 비교하기 select empno, salary, dept_name from emp, dept where emp.deptno = dept.deptno ; select empno, salary, dept_name from index_emp, index_dept where index_emp.deptno = index_dept.deptno; select empno, salary, dept_name from cluster_emp, cluster_dept where cluster_emp.deptno = cluster_dept.deptno; select empno, salary, dept_name from hash_emp, hash_dept where hash_emp.deptno = hash_dept.deptno;

% 실행 플랜 보는 방법 자동 추적 기능(또는 F6 키)를 선택함

보조 인덱스 만들기 기본 키에 대한 보조 인덱스 만들기 테이블에 기본 키를 지정하여 테이블을 생성함 create table pk2_emp (empno int primary key, emp_name varchar(100), salary int, deptno int); 비 기본 키에 대한 보조 인덱스 만들기 비기본 키에 대해 명시적으로 색인을 생성함 create table nk2_emp (empno int, emp_name varchar(100), salary int, deptno int); create index nk2_emp_idx on nk2_emp (salary);

실습 #3 기본키 보조 색인를 갖는 힙구조 테이블, 비기본키 보조 색인을 갖는 힙구조 테이 블에 데이터 입력함 기본키 보조 색인를 갖는 힙구조 테이블, 비기본키 보조 색인을 갖는 힙구조 테이 블에 데이터 입력함 insert into pk2_emp select * from emp; insert into nk2_emp select * from emp; 아래 질의를 실행하여 실행 플랜을 서로 비교하기 select empno, salary from emp where empno = 65000; select empno, salary from pk2_emp where empno = 65000; select empno, salary from nk2_emp where empno = 65000; select empno, salary from emp where salary = 30000; select empno, salary from pk2_emp where salary = 30000; select empno, salary from nk2_emp where salary = 30000;