DB/Oracle

Oracle - Object

먹보 개발자 2024. 11. 4. 17:27

※ Object의 종류 및 기능

오브젝트 설 명
테이블(Table) 행과 열의 조합으로 이루어진 데이터 저장 단위.
데이터베이스의 가장 기본적인 저장 형태.
시퀀스(Sequence) 자동으로 고유 번호를 생성하여, 주로 기본키 값 생성을 자동화한다.
인덱스 (Index) 데이터를 더 빠르게 조회할 수 있도록 돕는 자료구조.
데이터베이스가 검색 속도를 높이기 위해 사용하는 일종의 색인이다.
뷰 (View) 여러 테이블의 데이터를 논리적으로 결합하여 제공하는 가상의 테이블이다.
실제 데이터를 저장하지 않고 조회할 때 편리하게 사용한다.
시노님 (Synonym) 테이블이나 다른 객체에 대한 별칭을 정의하여, 접근을 단순화하거나 복잡한 이름을 숨길 수 있다.
프로그램 유닛 (Program Unit) Procedure, Function, Trigger 등의 SQL 및 PL/SQL 프로그램으로 구성된 모듈이다.

 

SEQUENCE란?

더보기

시퀀스는 고유한 숫자를 자동으로 생성하는 객체로, 주로 기본 키로 사용할 고유 번호를 자동으로 만들어준다. 번호 생성에 있어서 중간번호가 비어도 자동으로 다음 값을 제공한다.

 

SEQUENCE 생성하기

시퀀스를 생성할 때 여러 옵션을 지정할 수 있다.

  • INCREMENT BY: 시퀀스가 증가하는 단위
  • START WITH: 시퀀스가 시작할 초기 값
  • MAXVALUE/ NOMAXVALUE: 시퀀스가 가질 수 있는 최대값 설정
  • MINVALUE/ NOMINVALUE: 시퀀스의 최소값을 설정
  • CYCLE/ NOCYCLE: 최대값에 도달한 후 다시 최소값으로 돌아갈지 여부를 설정
  • CACHE/ NOCACHE: 시퀀스 값을 미리 메모리에 저장할지 여부를 지정하여 성능을 최적화 할 수 있음

 

SEQUENCE 사용법

시퀀스는 NEXTVAL과  CURVAL 의사 컬럼을 사용하여 다음 값과 현재 값을 참조할 수 있다.

  • NEXTVAL: 시퀀스에서 다음 값을 가져온다.
  • CURVAL: 현재 시퀀스 값을 가져온다. 단, NEXTVAL을 먼저 호출한 이후에만 사용 가능하다.

 

SEQUENCE 사용 규칙

  • 사용 가능한 경우: 주로 INSERT문이나 UPDATE문의 특정 절에서 사용할 수 있다.
  • 사용 불가능한 경우: 뷰나 집계 함수가 포함된 SELECT문 등에서 사용할 수 없다. 예를 들어, DISTINCT 키워드가 있는 경우나, 테이블 생성시 기본 값으로 사용할 수 없다.

 

SEQUENCE의 변경과 삭제

  • 이미 존재하는 시퀀스의 설정을 변경할 수 있다. 예를 들어, 증감 단위를 변경하거나 최대값을 조정할 수 있다.
  • 시퀀스를 삭제하려면 DROP SEQUENCE 명령을 사용한다.

 

인덱스(Index)의 개념

더보기
  • 인덱스는 데이터베이스에서 데이터를 더 빠르게 검색하기 위해 사용하는 도구이다. 예를 들어 책의 목차처럼, 특정 데이터가 어디에 위치하는지 빠르게 찾아주는 역할을 한다.
  • B*Tree 구조를 사용하여 검색 속도를 높이며, Oracle 서버는 데이터를 효율적으로 찾기 위해 자동으로 인덱스를 생성하고 유지한다.

 

Index의 생성 방법에 따른 종류

Unique Index  NON - Unique Index
Primary Key, Unique 제약조건에 의해 자동으로 생성
중복이 없는 데이터를 관리
사용자에 의해서 생성
중복 허용, 여러 사용자가 데이터에 접근할 때 사용
각 Index(Table) 값이 유일함을 보장 각 Index(Table)의 값이 유일하지 않음

 

인덱스의 구조

  • 인덱스는 테이블의 각 행에 대응하는 주소(ROWID)와 인덱스 컬럼값으로 구성된다.
  • ORACLE Server는 인덱스에 대해 B*Tree 구조를 이용한다.
  • ORACLE Server는 해당 ROWID를 갖는 컬럼값이 있는 노드에 이를 때까지 트리를 탐색한다.

 

B*Tree 구조

  • B*Tree는 모든 검색 경로가 균일하게 구성되어 있으며, 데이터를 효율적으로 찾기 위한 구조이다. ORACLE은 여러 페이지에 걸쳐 데이터를 저장해 트리 형태로 정리한다.

 

Oracle의 최적화 방법

  • 규칙 기준(Rule - based) 최적화와 비용 기준(Cost - base) 최적화가 있다.
    • 규칙 기준: SQL문장을 실행하기 위한 계획(Execution plan)을 선택할 때 정해진 규칙을 기준으로 최적화하는 방식. 내부적인 규칙에 따라 인덱스를 사용하는지 결정한다.
    • 비용 기준: SQL문장을 실행하기 위한 계획(Execution plan)을 선택할 때 분석해서 가장 적은 비용이 드는 방식으로 데이터를 조회하는 방법을 결정.

 

Index의 생성 및 삭제

  • 인덱스 생성과 삭제는 SQL 명령어로 가능하다.
  • CREATE INDEX: 인덱스를 생성한다.
  • DROP INDEX: 인덱스를 삭제한다.

 

Index 생성 지침

  • 인덱스를 만들어야 할 경우:
    • WHERE 절이나 JOIN 절에서 자주 검색되는 컬럼일 때.
    • 넓은 범위의 값을 가지거나 NULL 값이 많은 경우.
    • 테이블이 크고, 조회되는 행이 전체의 10~15% 정도일 때.
  • 인덱스를 만들지 않아야 할 경우
    • 테이블이 적을 때.
    • 대부분의 조회가 10~15% 이상의 데이터를 검색하는 경우.
    • 테이블이 자주 변경될 때.

요약: 인덱스는 검색 속도를 높여주지만, 모든 경우에 좋은것은 아니다. 필요하지 않거나 너무 자주 변동이 있는 데이터라면 인덱스가 성능에 오히려 부정적인 영향을 줄 수 있다.

 

View란?

더보기
  • View는 실제 테이블의 데이터를 직접 저장하지 않고, 가상의 테이블처럼 작동하는 SQL문을 정의한 것이다. 데이터가 없어도 테이블의 특정 데이터를 보여줄 수 있는 장 역할을 한다.

 

장점

  • 필요한 데이터만 선택적으로 보여주기 때문에 보안상의 이유로 사용할 수 있다.
  • 복잡한 쿼리를 미리 정의해 놓으면 간편하게 결과를 조회할 수 있다.
  • 여러 테이블을 조인하여 마치 하나의 테이블처럼 사용할 수 있다.

View의 생성 방법

CREATE VIEW 구문을 통해 View를 생성할 수 있으며, SQL문을 기반으로 한다.

 

옵션

  • FORCE: 기반이 되는 테이블이 없어도 View를 강제로 생성.
  • WITH CHECK OPTION: View에 정의된 조건을 만족하는 데이터만 삽입하거나 업데이트 가능하게 설정.
  • WITH READ ONLY: View에 대해 읽기 전용으로 설정해 DML(INSERT, UPDATE, DELETE) 연산이 불가능하게 만든다.

View에서 DML문 사용 규칙

  • 단일 테이블을 기준으로 만들어진 간단한 View는 DML 작업(INSERT, UPDATE, DELETE)이 가능.
  • 그러나 JOIN이나 GROUP BY등을 포함한 복잡한 View는 DML 작업을 수행할 수 없다. 예를 들어, SALARY * 12와 같이 수식을 사용한 컬럼이 있으면 수정할 수 없다.

View 생성에 사용되는 옵션

  • WITH CHECK OPTION: View에 입력되는 데이터가 View의 조건에 맞지 않으면 입력이 제한된다.
  • WITH READ ONLY: View가 오직 조회 목적으로만 사용되며, 데이터를 수정하거나 삽입할 수 없다.

View의 확인 및 삭제

SELECT view_name, text
FROM user_views;
DROP VIEW View이름;

 

Synonym 이란?

  • Synonym은 특정 객체(예: TABLE, VIEW)에 대해 별칭을 설정하는 기능이다.
  • PUBLIC SYNONYM: 모든 사용자가 접근할 수 있도록 설정된 별칭으로, DBA 권한을 가진 사용자만 생성할 수 있다.

활용 목적

  • 객체 이름이 길거나 복잡할 때 쉽게 참조하기 위해 간단한 이름을 붙일 수 있다.
  • 서로 다른 스키마에 있는 객체를 간단한 별칭으로 접근하게 함으로써 사용 편의성을 높인다.

 

요약: View는 가상테이블로 데이터를 선택적으로 보여주는 창 역할을 하며, Synonym은 참조할 때 사용하기 쉬운 별칭을 붙이는 기능이다.