반응형
250x250
Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 |
Tags
- JPQL
- 정렬
- 성능최적화
- 데이터베이스
- INDEX SCAN
- 페치조인
- fetch join
- 스프링 데이터 JPA
- 스프링
- 엔티티
- 친절한 SQL 튜닝
- 컬렉션 조회 최적화
- 스프링 컨테이너
- 오라클
- 서브쿼리
- TCP/IP
- 데이터모델링
- index
- SQL 튜닝
- 그룹함수
- @MappedSuperclass
- 값 타입
- querydsl
- Spring
- 자바의 정석
- Spring data JPA
- SQL
- 페이징
- JPA
- DTO
Archives
- Today
- Total
nu_s
[SQL] OBJECT 본문
728x90
반응형
Object의 종류 및 기능
관계형 데이터베이스에서 특정한 기능을 가진 Object에는 다음과 같은 것들이 있다.
오브젝트 | 설명 |
테이블(table) | 행과 열의 조합으로 구성된 기본 저장 단위 |
시퀀스(sequence) | 자동으로 고유한 숫자값을 생성해주며 주로 기본키 값을 생성하기 위해 사용 |
인덱스(index) | 쿼리(query) 속도를 향상시키기 위해 사용 |
뷰(view) | 하나 또는 그 이상의 테이블로부터 논리적으로 데이터를 추출한 부분집합으로 논리적이고 가상적인 테이블 |
시노님(synonym) | OBJECT에 대한 또다른 이름으로 ALIAS 역할 |
프로그램 유닛(program unit) | SQL, PL/SQL문으로 작성한 Procedure, Function, Trigger, Package |
1. SEQUENCE
- 자동으로 Unique number를 생성 (중간에 GAP 발생 가능)
- 공유 가능한 Object
- 일반적으로 PK값 생성을 위해서 사용
1-1 SEQUENCE 생성하기
CREATE SEQUENCE 이름
[INCREMENT BY n]
[START WITH n]
[{MAXVALUE n | NOMAXVALUE}]
[{MINVALUE n | NOMINVALUE}]
[{CYCLE | NOCYCLE}]
[{CACHE | NOCACHE}];
- INCREMENT BY n : SEQUENCE 번호 간의 간격 (생략시 1씩 증가)
- START WITH n : 생성되는 첫번째 SEQUENCE 번호 (생략시 1부터 시작)
- MAXVALUE n : 생성 가능한 SEQUENCE 최대값
- NOMAXVALUE : 기본 옵션으로 최대값은 10²⁷
- MINVALUE n : 생성 가능한 SEQUENCE의 최소값
- NOMINVALUE : 최소값을 1로 지정
- CYCLE | NOCYCLE : 최대값이나 최소값까지 값이 생성된 경우에도 값을 생성시키는 것(기본은 NOCYCLE)
- CACHE n | NOCACHE : 메모리에 유지할 값의 수로, 기본값은 20. NOCACHE일때만, 테이블에서 조회 가능
1-2 SEQUENCE 사용법
의사 컬럼(Pseudo columns) NEXTVAL, CURRVAL의 사용
- NEXTVAL은 사용 가능한 다음 SEQUENCE 값을 반환한다.
- NEXTVAL은 다른 사용자에 의해 참조되더라도 매번 고유한 값을 반환한다.
- CURRVAL은 현재 SEQUENCE 값을 포함한다.
- CURRVAL은 반드시 NEXTVAL 사용 후에 참조되어야 한다.
1-3 SEQUENCE의 변경과 삭제
ALTER SEQUENCE 시퀀스이름
[ INCREMENT BY n ]
[ { MAXVALUE n | NOMAXVALUE } ]
[ { MINVALUE n | NOMINVALUE } ]
[ { CYCLE | NOCYCLE } ]
[ { CACHE n | NOCACHE } ]
DROP SEQUENCE 시퀀스이름;
- 자신의 SEQUENCE이거나 그 SEQUENCE에 대한 ALTER 권한을 가져야 SEQUENCE를 수정할 수 있다.
- 변경 후의 SEQUENCE값만이 ALTER SEQUENCE 명령에 영향을 받는다.
- 유효성 검사를 하게된다.
- START WITH 옵션은 ALTER SEQUENCE를 써서 변경할 수 없다.
다른 번호에서 시작하려면 이전 SEQUENCE를 삭제하고 다시 생성해야 한다. - SEQUENCE를 제거할 DROP ANY SEQUENCE 권한을 가지고 있거나 그 SEQUENCE의 소유자이어야 한다.
2. INDEX
2-1 인덱스(Index)의 개념
- 테이블의 데이터를 좀 더 빠르게 검색하기 위해 사용하는 데이터베이스 Object이다.
- Oracle Server가 최적화 방법에 따라 어떤 Index를 사용할 것인지, 혹은 사용하지 않을 것인지 결정한다.
- B*Tree의 검색 방법으로 디스크 입출력(I/O) 횟수를 줄인다.
- Oracle Server가 Index를 자동적으로 사용하고 유지보수한다.
- Index는 논리적, 물리적으로 테이블과는 독립적이다.
- Index는 자동으로 생성되기도 하고, 사용자가 필요에 의해 만들기도 한다.
2-2 인덱스의 구조
- 인덱스는 테이블의 각 행에 대응하는 주소(ROWID)와 인덱스 컬럼값으로 구성된다.
- Oracle Server는 인덱스에 대해 B*Tree 구조를 이용한다.
- Oracle Server는 해당 ROWID를 갖는 컬럼값이 있는 노드에 이를 때까지 트리를 탐색한다.
2-3 인덱스의 생성 및 삭제
CREATE INDEX 인덱스명
ON 테이블명(컬럼);
DROP INDEX 인덱스명;
2-4 인덱스를 만드는 때
- 조건절(WHERE)이나 조인(Join) 조건에서 컬럼을 자주 이용할 때
- 컬럼이 넓은 범위의 값을 가질 때
- 많은 NULL 값을 갖는 컬럼일 때
- 테이블의 데이터가 많고 그 테이블에서 조회되는 행의 수가 전체의 10-15% 정도일 때
2-5 인덱스를 만들지 않아야 할 때
- 테이블이 작을 때
- 컬럼이 조회의 조건으로 사용되는 경우가 별로 없을 때
- 대부분의 조회가 행의 10-15% 이상을 검색한다고 예상될 때
- 테이블이 자주 변경될 때
인덱스가 검색속도를 증가시키지만 항상 빠른 것은 아니다.
인덱스를 많이 만든다고 해서 항상 좋은 것도 아니다.
인덱스가 유지되기 위해서는 그만큼 저장공간이 필요하고, 테이블의 수정시에 인덱스도 변경되어야 하므로 서버의 성능을 저하시킬 수 있다.
인덱스에 대해 자세한 내용은 SQL 튜닝에서 다루도록 하겠다.
3. VIEW
3-1 View란?
- View란 테이블이나 다른 View를 기초로 한 가상의 테이블
- View는 자체 데이터는 없지만 테이블의 데이터를 보고나 변경할 수 있는 창과 같다.
- View는 실제적으로는 SQL문으로 저장된다.
- View의 장점
- 뷰는 데이터베이스의 선택적인 내용을 보여줄 수 있기 때문에 데이터베이스에 대한 액세스를 제한한다. (보안상의 이유)
- 복잡한 SQL문을 통해 얻을 수 있는 결과를 간단한 SQL문을 써서 구할 수 있게 한다.
- 한 개의 뷰로 여러 테이블에 대한 데이터를 검색할 수 있다. (Join)
3-2 View의 생성
CREATE [ OR REPLACE ] [ FORCE | NOFORCE ] VIEW 이름 [ (alias) ]
AS subQuery
[ WITH CHECK OPTION [ CONSTRAINT 제약조건 ] ]
[ WITH READ ONLY ];
-- FORCE : 기본 테이블 유무에 관계없이 뷰를 만듦
-- Alias : SubQuery로 선택된 값에 대한 컬럼명
-- WITH CHECK OPTION : 뷰에 의해 액세스될 수 있는 행만이 입력되거나 변경될 수 있음을 지적
-- WITH READ ONLY : 뷰에 DML이 수행될 수 없음
- 뷰를 정의하는 SQL문은 조인, 그룹, SubQuery를 포함하는 복잡한 SELECT 문장으로 구성될 수 있다.
- 뷰를 정의하는 SQL문에는 ORDER BY 절을 쓸 수 없다.
- 제약조건의 이름을 명시하지 않으면 시스템이 SYS_Cn 형태의 이름을 지정한다.
- 뷰를 삭제하거나 재생성하지 않고 뷰의 정의를 변경하려면 OR REPLACE 옵션을 쓸 수 있다.
3-3 View의 확인 및 삭제
SELECT view_name, text
FROM user_views;
DROP VIEW 뷰이름;
4. SYNONYM
- Synonym이란 특정 Object에 부여하는 또 다른 이름이다.
- Synonym은 사용자의 편의나 참조를 빠르게 하기 위해서 사용한다.
CREATE [ PUBLIC ] SYNONYM 시노님명
FOR 오브젝트명;
-- PUBLIC : 모든 사용자가 접근 가능한 동의어 생성 (DBA만 PUBLIC SYNONYM 생성 가능)
728x90
반응형
'Data Base > SQL' 카테고리의 다른 글
[SQL] ADVANCED SQL 2 (0) | 2023.08.14 |
---|---|
[SQL] ADVANCED SQL 1 (0) | 2023.08.14 |
[SQL] DCL (0) | 2023.08.09 |
[SQL] DDL (0) | 2023.08.08 |
[SQL] Dictionary (0) | 2023.08.06 |