C.S/DB 7

Oracle NL조인

NL 조인은 기본적으로 이중 중첩 루프문 SELECT /*+ no_nlj_batching(B) */ * FROM EMP A,CLIENT B WHERE A.EMPNO = B.CLNO AND A.HIREDATE > '20200101'; (1) SELECT * FROM A WHERE A.date>'20110101'의 조회를 수행하면서 해당 엔티티가 존재하면 A.id를 가짐 (2) SELECT * FROM B WHERE B.id = N( (1)에서 조회한 A.id ) 위와 같은 방식으로 조회를 수행하게 된다. 때문에 2번 수행의 경우 인덱스 스캔을 하지 않는다면 A테이블에서 조건을 만족하는 엔티티 만큼 B를 테이블 스캔하게 되므로 반드시 내부테이블은 인덱스 스캔을 수행해야 한다. A 테이블을 outer tabl..

C.S/DB 2022.10.10

Oracle 파티션 테이블과 파티션 인덱스 (INSERT 튜닝)

Oracle Partition UPDATE 튜닝 정리 대용량 데이터를 입력할 때 성능 문제가 발생할 수 있어서 인덱스를 DROP 하고 데이터를 입력 후에 데이터가 모두 입력시킨 다음 인덱스를 재생성해주는 방법을 고려할 수 있다. 그러나 전체 데이터에 대한 인덱스를 재생성하는 비용도 적지 않기 때문에 쉽게 선택 할 수 없다. 만약 테이블이 파티셔닝 되어있고 이에 대해서 로컬 파티션 인덱스가 생성되어 있다면 파티션 단위로 인덱스를 재생성할 수 있기 때문에 데이터 입력을 빠르게 수행할 수 있다. 1. 작업 대상 테이블 파티션을 nologging 모드로 전환한다. ALTER TABLE INFO_TABLE MODIFY PARTITION P_202201 nologging; 2. 작업 대상 테이블 파티션과 매칭되는 ..

C.S/DB 2022.07.06

Oracle 파티션 테이블과 파티션 인덱스 (DELETE 튜닝)

Oracle Partition DELETE 튜닝 정리 DELETE FROM INFO_TABLE WHERE TIME < '20220101' (INFO_TABLE은 파티션 키는 TIME이며 PK는 VALUE1+TIME , TIME만 으로 구성된 인덱스도 존재) 위의 테이블에서 테이블과 인덱스를 실시간으로 관리하는 것은 많은 시간을 필요로 한다. 인덱스를 Drop 했다가 재생성하는 방법도 모든 인덱스를 재생성해야 하므로 시간이 많이 소요된다. * Delete의 과정 1. 레코드 삭제 2. 테이블 레코드 삭제에 대한 Undo Logging 3. 테이블 레코드 삭제에 대한 Redo Logging 4. 인덱스 삭제 5. 인덱스 레코드 삭제에 대한 Undo Logging 6. 인덱스 레코드 삭제에 대한 Redo Lo..

C.S/DB 2022.07.06

Oracle 파티션 테이블과 파티션 인덱스 (UPDATE 튜닝)

Oracle Partition UPDATE 튜닝 정리 인덱스가 DML 성능에 큰 영향을 미치므로 대량 데이터를 입력/수정/삭제 시에는 인덱스를 DROP하거나 Unusable 상태로 변경하고 작업하는 방법을 많이 활용한다 (전체의 5%이상일시) UPDATE INFO_TABLE SET VALUE2='CHANGE' WHERE VALUE1 = 'Y' AND TIME '20211130' (INFO_TABLE은 파티션 키는 TIME 이며 PK 는 VALUE1+TIME , TIME만 으로 구성된 인덱스도 존재) 위와 같은 쿼리를 수행할시 변경해야될 레코드가 전체의 5%이상이라고 할시 인덱스와 테이블을 모두 수정하는데에 많은 시간이 필요하다. 만약 위의 경우에서 테이블이 파티..

C.S/DB 2022.07.06

Oracle 파티션 테이블과 파티션 인덱스

Oracle Partition (1) 파티셔닝 : 테이블 또는 인덱스 데이터를 특정 컬럼에 따라 별도 세그먼트에 나눠서 저장 1. 관리적 측면 장점 : 파티션 단위 백업,추가,삭제,변경 -> 가용성 향상 2. 성능적 측면 장점 : 파티션 단위 조회 및 DML 경합 또는 부하 분산 * 파티션 Pruning SQL 하드파싱이나 실행시점에 조건절을 분석하여 불필요한 부분의 제거 SELECT * FROM INFO_TABLE WHERE TIME >'20210101' AND TIME < '20220101' 위의 SQL INFO_TABLE이 전체 3000만건 중 해당 기간동안의 데이터가 1000만건이 조회된다고 하면 인덱스로 랜덤엑세스하는것 보다 테이블엑세스의 성능이 나을 수 있다. 그러나 위의 Partitioned..

C.S/DB 2022.07.05

DataBase 정규화

데이터베이스 정규화 1. 불필요한 데이터 삭제 2. 삽입, 수정 ,삭제시 이상 현상 방지 제 1 정규화 - 한속성이 단하나의 값만 존재 1) 다가 속성 이름 번호 (PK)고객번호 홍길동 1 1 홍길동 2 1 - 고객 번호를 안다고 해도 이름과 번호를 알 수 없다. - 번호를 PK로 바꾸던가 인조키를 만들어준다. 이름 고객번호(PK) 홍길동 1 번호(PK) 고객번호(FK) 1 1 2 1 2) 복합 속성 사용 고객번호(PK) 이름 주민번호 100 홍 길동 990303 - 하나의 컬럼에 여러개의 정보가 들어있음 이름 (성 +이름) - 컬럼을 분리한다. - 상황에 따라 사용한다. 고객번호(PK) 성 이름 주민번호 100 홍 길동 930909 3) 유사속성 반복 주문번호1 상품1 주문번호2 상품2 1 의자 2 책..

C.S/DB 2021.02.28

DB 트랜잭션의 정의, 특징

데이터베이스 트랜잭션 데이터베이스가 한번에 실행 되어야하는 논리적 연산의 집함 상호작용의 단위로써 성공과 실패가 분명하며 , 트랜잭션간에 상호 독립적이며, 일관되고 믿을 수 있는 시스템을 의미한다. 트랜잭션의 특징 (ACID) 1. 원자성 , Atomicity - 트랜잭션의 작업들이 진행중에 중간에 중단되지 않는것을 보장 ex) 자금 이체시 보내기만 성공하고 받는 것은 실패하는 경우는 없다. 2. 일관성, Consistency - 데이터베이스가 트랜잭션 이후에 기존의 데이터 베이스의 상태가 변경되거나 트랜잭션에 대한 데이터만 기존 데이터의 기준에 위배하는 다른 형식의 데이터를 가지고 있어서는 안된다. ex) 모든 계좌는 잔금이 1원 이상 남아있어야 한다는 데이터베이스에서 자금 이체후 잔금이 0원이 될 수..

C.S/DB 2021.02.28