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은 참조할 때 사용하기 쉬운 별칭을 붙이는 기능이다.