다양한 예제로 쉽게 배우는 오라클 SQL 과 PL/SQL

Slides:



Advertisements
Similar presentations
1 SQL 정보보호학과 양 계 탁. 2 SQL 개요 SQL 개요 3 Database u 연관된 데이터들의 집합 u 데이터를 쉽게 관리하는 프로그램 종 류종 류 관계형 데이터베이스 객체지향형 데이터베이스 계층형 데이터베이스 네트워크 데이터베이스 데이터를 2 차원적인 테.
Advertisements

강사: 이종인 다우 교육원 전임강사 / 온디멘드 수석 컨설턴트 / FMG 수석 컨설턴트
SQL 언어 SQL.
Allow reverse scans allow reverse scnas. allow reverse scans allow reverse scnas.
SQL Statement Tuning e-Architecture 팀 임성욱.
19.(코드+년도+월)별,(코드)별,전체총액을 한번에
오라클 데이터베이스 성능 튜닝.
Perfect! 대용량 데이터베이스 튜닝Ⅱ.
데이터 모델링 방법론 2003년 03월.
PL/SQL.
Proc*C 기초 Style System 김도형.
질의어와 SQL 기본 SQL 고급 SQL 데이타의 수정 데이타 정의 언어 내장 SQL
관계 대수와 SQL.
대용량 데이터베이스 솔루션 발표자: 박보영 2007년 5월19일.
오라클 데이터베이스 성능 튜닝.
DataBase 기본 교육 신입사원용 최지철.
Database & Internet Computing Laboratory 한 양 대 학 교
다양한 예제로 쉽게 배우는 오라클 SQL 과 PL/SQL
박시우 ( 업무에 바로 쓰는 SQL 튜닝 박시우 (
제 5 장 인덱스 생성 및 관리.
Section II. 웹 취약점의 공격과 방어 3. 웹 취약점 분류 4. SQL Injection 5. XSS
SELECT 문 사원 테이블의 모든 정보를 출력하는 예제 1. 비교 연산자 SELECT 문의 형태
4장. 관계 대수와 SQL SQL 관계 데이터 모델에서 지원되는 두 가지 정형적인 언어
SQL-99: 스키마 정의, 기본제약조건, 질의어 충북대학교 구조시스템공학과 시스템공학연구실
JDBC 프로그래밍 이수지 이동주 1.
7장 조인.
다양한 예제로 쉽게 배우는 오라클 SQL 과 PL/SQL
SQL 개요 SQL 개요 - SQL은 현재 DBMS 시장에서 관계 DBMS가 압도적인 우위를 차지하는 데 중요한 요인의 하나
10장. 데이터베이스 보안과 권한 관리 데이터베이스 보안과 권한 관리
데이터베이스 담당교수 신정식 Chapter 4 SQL(1).
Toad for Oracle 설치 방법.
오라클 데이터베이스 성능 튜닝.
데이터베이스 와 JDBC 1.데이터베이스와 데이터베이스 관리 시스템은? 2.데이터베이스 장점?
11장. 데이터베이스 서버 구축과 운영.
요약 정보 만들기.
오라클 데이터베이스 성능 튜닝.
kHS 데이터베이스 테이블 및 인덱스 kHS.
14장 뷰.
4.2 SQL 개요 SQL 개요 SQL은 IBM 연구소에서 1974년에 System R이라는 관계 DBMS 시제품을 연구할 때 관계 대수와 관계 해석을 기반으로, 집단 함수, 그룹화, 갱신 연산 등을 추가하여 개발된 언어 1986년에 ANSI(미국 표준 기구)에서 SQL.
14 뷰(View) 뷰의 개념 뷰 관리.
제 17 장 (Oracle) 오라클에서 질의 최적화
뷰와 저장 프로시저 뷰의 개념을 이해한다. 뷰의 정의와 관리 방법을 이해한다. 뷰를 사용함으로써 생기는 장점을 알아본다.
SELECT empno, ename, job, sal, dname FROM emp, dept
3장 SQL*Plus 명령어.
9장 테이블 생성 및 변경, 삭제하기(DDL).
DP-ORA 쿼리 최적화 가이드 쿼리 최적화 방법 2014년 7월.
SQL.
YOU Youngseok 트랜잭션(Transaction) YOU Youngseok
강사: 이종인 다우 교육원 전임강사 / 온디멘드 수석 컨설턴트 / FMG 수석 컨설턴트
SQL Server 7.0 세미나 (Performance Tuning)
다양한 예제로 쉽게 배우는 오라클 SQL 과 PL/SQL
다양한 예제로 쉽게 배우는 오라클 SQL 과 PL/SQL
고급 T-SQL.
CHAPTER 06. 데이터베이스 자료의 조직적 집합체_데이터베이스 시스템의 이해
13장 무결성 제약조건.
정보처리기사 8조 신원철 양진원 유민호 이기목 김다연 윤현경 임수빈 조현진.
1장. SELECT 문장을 이용하여 원하는 데이터 가져오기
JSP 게시판 구현.
View(뷰) 1 가상 테이블(Virtual Relation)
3장. SQL Server 2008전체 운영 실습 및 DB와 프로그램의 연동
오라클 쿼리 문제 EMP (사원 테이블) DEPT (부서 테이블) 컬럼명 설명 EMPNO 사원번호 ENAME 사원명 JOB
기본적인 SELECT문 작성.
8장 테이블의 생성 및 변경 정인기.
MS-SQL7.0 Implementation 강의 노트
06. SQL 명지대학교 ICT 융합대학 김정호.
How I Approach Tuning a SQL Statement
테이블 관리 테이블 생성,수정,삭제 데이터 입력 수정, 삭제 2010학년도 2학기.
Stored program 장종원
Data Base Mysql.
제 5 장 MariaDB인덱스 생성 및 관리.
Presentation transcript:

다양한 예제로 쉽게 배우는 오라클 SQL 과 PL/SQL 서진수 저

9장 인덱스를 배웁니다 1

9. 인덱스를 배웁니다 1. 인덱스란 무엇인가? 2

9. 인덱스를 배웁니다 - ROWID ( 주소 ) 조회하기 3 SCOTT>SELECT ROWID, empno, ename 2 FROM emp 3 WHERE empno=7902 ; ROWID EMPNO ENAME --------------------------------- ---------- ------------- AAASHOAAEAAAACXAAM 7902 FORD 3

9. 인덱스를 배웁니다 AAASHOAAEAAAACXAAM - ROWID ( 주소 ) 란 무엇인가? 4 ROWID 입니다 데이터 오브젝트번호 파일 번호 BLOCK 번호 ROW 번호 4

9. 인덱스를 배웁니다 2. 인덱스의 생성 원리 대상 데이터 FULL SCAN SORT Block 에 기록 5

3. 인덱스 구조와 작동 원리 (B-TREE 인덱스 기준입니다) 9. 인덱스를 배웁니다 3. 인덱스 구조와 작동 원리 (B-TREE 인덱스 기준입니다) 6

9. 인덱스를 배웁니다 7

해당 블록을 복사하여 DB CACHE 로 로딩함 9. 인덱스를 배웁니다 SQL> SELECT * 2 FROM 사원 3 WHERE 이름=’홍길동’ ; 3번 줄의 where 조건의 칼럼으로 인덱스 검색 해당 블록을 복사하여 DB CACHE 로 로딩함 해당 데이터의 ROWID 를 찾음 8

9. 인덱스를 배웁니다 4. 인덱스의 종류 1) B-TREE 인덱스 9

UNIQUE Index 는 UNIQUE 제약조건과 동일합니다. 즉 중복되는 값을 입력할 수 없습니다. 9. 인덱스를 배웁니다 (1) UNIQUE INDEX SQL>CREATE UNIQUE INDEX 인덱스명 2 ON 테이블이름(컬럼명1 ASC | DESC , 컬럼명,……..); SCOTT>CREATE UNIQUE INDEX idx_dept2_dname 2 ON dept2(dname) ; SCOTT>INSERT INTO dept2 2 VALUES(9100,'임시매장',1006,'서울지사'); 1 row created. 2 VALUES(9101,'임시매장',1006,'부산지사'); INSERT INTO dept2 * ERROR at line 1: ORA-00001: UNIQUE constraint (SCOTT.IDX_DEPT2_DNAME) violated UNIQUE Index 는 UNIQUE 제약조건과 동일합니다. 즉 중복되는 값을 입력할 수 없습니다. 10

9. 인덱스를 배웁니다 (2) Non UNIQUE INDEX 11 SCOTT>CREATE INDEX 인덱스명 2 ON 테이블명(컬럼명1 ASC | DESC , 컬럼명2 , …….) ; SCOTT>CREATE INDEX idx_prof_position 2 ON professor(position DESC ) ; 11

9. 인덱스를 배웁니다 (3) Function Based INDEX(FBI – 함수기반 인덱스) SCOTT>CREATE INDEX idx_prof_pay_fbi 2 ON professor(pay+100) ; - Index Suppressing Error SQL 을 작성 할 때 Where 절 등에 인덱스 검색 조건을 잘 못 주어서 인덱스를 사용 할 수 없는 경우를 뜻합니다. 인덱스가 만들어져 있는 칼럼에는 일반적으로는 산술 연산이나 함수 등을 사용하여 변형하면 안됩니다. 12

9. 인덱스를 배웁니다 (4) DESCENDING INDEX 큰 값을 먼저 조회 해야 할 경우에 주로 사용함. 주로 날짜의 경우 최근 날짜를 먼저 조회하는 경우가 많기 때문에 날짜 컬럼에 인덱스를 만들 경우에 자주 사용됨. SCOTT>CREATE INDEX idx_prof_pay 2 ON professor(pay DESC ); 13

9. 인덱스를 배웁니다 (5) 결합 인덱스 ( Composite INDEX ) 두 개 이상의 칼럼을 결합하여 생성하는 인덱스. 주로 두 개 이상의 칼럼이 AND 조건으로 검색 될 경우 많이 사용됨. SQL> SELECT 이름, 성별 2 FROM 사원 3 WHERE 성별 = ‘여자’ 4 AND 이름 = ‘유관순’ ; * 결합 인덱스 생성 구문 예 : SQL> CREATE INDEX idx_사원_성별_이름 2 ON 사원(성별,이름) ; 14

9. 인덱스를 배웁니다 - 칼럼 순서의 중요성 15

9. 인덱스를 배웁니다 2) BITMAP INDEX 16 SCOTT> CREATE BITMAP INDEX idx_사원_성별_bit 2 ON 사원(성별) ; 16

9. 인덱스를 배웁니다 - 성별 칼럼으로 만들어진 Bitmap Bitmap 은 칼럼에서 데이터의 종류만큼 신규 데이터가 입력될 경우에 모든 Map 이 Update 되어야 합니다. - 지역 칼럼으로 만들어진 Bitmap 17

9. 인덱스를 배웁니다 5. 인덱스의 주의사항 1) DML에 취약하다 (1) Insert - Index Split 현상 (2) Delete - 인덱스 내용이 삭제가 안됨 (3) Update – Delete + Insert 작업이 발생함 2) 타 SQL 실행에 악영향을 줄 수 있습니다. 18

9. 인덱스를 배웁니다 6. 인덱스 관리 방법 1) 인덱스 조회하기 19 SCOTT>SELECT table_name, index_name 2 FROM user_indexes 3 WHERE table_name='DEPT2'; TABLE_NAME INDEX_NAME -------------------------- ----------------------------- DEPT2 IDX_DEPT2_DNAME DEPT2 SYS_C0014275 19

9. 인덱스를 배웁니다 2) 사용 여부 모니터링 하기 Monitoring 기간동안 사용되었는지 확인 20 SCOTT>ALTER INDEX idx_dept2_dname MONITORING USAGE ; SCOTT>ALTER INDEX idx_dept2_dname NOMONITORING USAGE ; SCOTT>SELECT index_name, used 2 FROM v$object_usage 3 WHERE index_name='IDX_DEPT2_DNAME'; INDEX_NAME USED ------------------------- ------------ IDX_DEPT2_DNAME NO Monitoring 기간동안 사용되었는지 확인 20

9. 인덱스를 배웁니다 3) INDEX Rebuild 하기 Index 는 생성 후 오라클이 자동으로 관리를 합니다. 그러나 앞에서 살펴본 바와 같이 데이터가 삭제되거나 update 될 경우 인덱스 내부의 상태가 흐트러지는 현상이 발생합니다. 이럴 경우 인덱스를 Rebuild 해 주면 성능이 개선됩니다. 단, 흐트러져있는 정도에 따라 Rebuild 보다는 Recreate 가 더 좋을 경우도 있을 수 있습니다. 실습은 교재 321 – 323 페이지를 참고하세요 21

9. 인덱스를 배웁니다 7. 인덱스 활용 예제 1) 인덱스를 활용하여 정렬한 효과를 내는 방법 실습은 교재 325 – 326 페이지를 참고하세요 22

9. 인덱스를 배웁니다 7. 인덱스 활용 예제 2) 인덱스를 활용하여 최소값(MIN) / 최대값(MAX)을 구하는 방법 23

9. 인덱스를 배웁니다 7. 인덱스 활용 예제 2) 인덱스를 활용하여 최소값(MIN) / 최대값(MAX)을 구하는 방법 24

9. 인덱스를 배웁니다 7. 인덱스 활용 예제 2) 인덱스를 활용하여 최소값(MIN) / 최대값(MAX)을 구하는 방법 25

Index 사용 인덱스를 통해서 정렬된 데이터를 보고자 할때 where절에 주는 조건 3가지 (order by절을 안써도 인덱스를 통해서 정렬된 결과를 볼수있음) 1. 문자 > ' ' 2. 숫자 > 0 3. 날짜 < to_date('9999/12/31','rrrr/mm/dd')

Index 사용 1.index : 인덱스를 통해서 테이블의 데이터를 찾고자 할때 2. index_asc : 인덱스의 컬럼의 데이터를 ascending하게 읽겠다 3. index_desc:인덱스의 컬럼의 데이터를 descending하게 읽겠다 4. index_ss : index skip scan을 하겠다. 결합컬럼 인덱스의 첫번째 컬럼이 where절에 존재하지 않을 때 사용

Index 사용 사원테이블의 sal에 인덱스를 생성하고 월급이 3000인 사원의 이름,월급을 조회하고 인덱스를 통해서 데이터를 찾는지 확인하라 create index emp_sal on emp(sal); select /*+ index(emp emp_sal) */ ename,sal from emp where sal=3000;

Index 사용 이름,월급을 출력하는데 이름을 ABCD순서대로 출력(order by 쓰지말고) select /*+ index_asc(emp emp_ename) */ ename, sal from emp where ename>' ‘;

9. 인덱스를 배웁니다 7. 인덱스 활용 예제 2) 인덱스를 활용하여 최소값(MIN) / 최대값(MAX)을 구하는 방법 26 SCOTT>SELECT /*+ index_desc(s idx_사원_name) */ name 2 FROM 사원 s 3 WHERE name >='0' 4 AND rownum=1 ; NAME ---------- 홍길동 26

FIRST_ROW (MAX/MIN) 방법 9. 인덱스를 배웁니다 7. 인덱스 활용 예제 2) 인덱스를 활용하여 최소값(MIN) / 최대값(MAX)을 구하는 방법 SCOTT>select /*+ index_desc (s idx_사원_name) */ max(name) 2 from 사원 s 3 where name > '0' ; MAX(name) -------------- 홍길동 FIRST_ROW (MAX/MIN) 방법 27

9. 인덱스를 배웁니다 8. Invisible Index (인비저블 인덱스) - 11g New Feature - 인덱스는 사용하지 않을 경우 삭제를 해야 성능향상에 도움이 됨. 사용 여부를 알기가 어렵다는 단점이 있음. 인비져블 인덱스는 인덱스가 삭제 된 상태처럼 만들어서 테스트를 할 수 있음 SCOTT>CREATE INDEX idx_emp_ename ON emp(ename) ; Index created.   SCOTT>SELECT table_name,index_name,visibility 2 FROM user_indexes 3 WHERE table_name = 'EMP' ; TABLE_NAME INDEX_NAME VISIBILIT ------------------ ------------------------ ------------------- EMP IDX_EMP_ENAME VISIBLE EMP PK_EMP VISIBLE 28

9. 인덱스를 배웁니다 SCOTT>ALTER INDEX IDX_EMP_ENAME INVISIBLE ; Index altered.   SCOTT>SELECT table_name, index_name, visibility 2 FROM user_indexes 3 WHERE table_name = 'EMP' ; TABLE_NAME INDEX_NAME VISIBILITY ----------------- ------------------------ ------------------------- EMP IDX_EMP_ENAME INVISIBLE EMP PK_EMP VISIBLE 29

9. 인덱스를 배웁니다 1. 다시 상태를 VISIBLE 로 변경하기   SCOTT>ALTER INDEX idx_emp_ename VISIBLE ; Index altered. SCOTT>SELECT table_name, index_name, visibility 2 FROM user_indexes 3 WHERE table_name = 'EMP' ; TABLE_NAME INDEX_NAME VISIBILIT ---------------- ---------------------- -------------------- EMP IDX_EMP_ENAME VISIBLE <- 변경되었습니다. EMP PK_EMP VISIBLE 30

9. 인덱스를 배웁니다 2. SQL 힌트 구문에서 해당 인덱스를 사용하게 하기   SCOTT>SELECT /*+ index (emp idx_emp_ename) */ ename 2 FROM emp 3 WHERE ename >'0'; 31

9. 인덱스를 배웁니다 DROP INDEX 인덱스명