하나의 테이블에서 데이터를 추출할때 다른 테이블에 없는 데이터만 추출하고자 할때 사용하는 것이 ANTI JOIN 입니다. 다른 집합에 있는 것만 뽑는 것은 EXIST나 IN 으로 연결하여 뽑으면 대부분 좋은 성능의 결과를 얻을 수 있지만 NOT EXISTS나 NOT IN은 좋은 성능을 위해서 고려해야 할 점이 많죠. NOT IN 이 사용되야 할때 MERGE ANTI JOIN이나 HASH ANTI JOIN를 사용하면 성능 향상에 많은 도움이 됩니다. 실제로 오늘 처음으로 MERGE ANTI JOIN를 사용해 봤는데 기적 그 자체더군요. 굳~~ SELECT COUNT(*) FROM TAB1 WHERE COL1 LIKE 'ABC%' AND COL2 IS NOT NULL AND COL2 NOT IN ( SELE..
A 테이블과 B 테이블를 조인하여 A 테이블의 특정필드에 B 테이블의 특정 필드의 값을 업데이트 하고자 할경우 좋은 성능을 내는 힌트입니다. update /*+ bypass_ujvc */ ( select a.score old, b.score new from a, b where a.id = b.id ) set old = new ; 주의할 점은 oracle document에서도 찾기 힘든 힌트라 불안정할 경우가 있다는 얘기가 있더군요. 업데이트 전 값을 미리 체크하고 업데이트가 잘 작동되었는지 확인이 필요하다고 하더군요. 아직 한번도 사용해 본적은 없지만 . . .
대량의 데이터를 처리할 경우 OR 연산이 조건에 있으면 성능 저하에 많은 영향을 줍니다. 특히 OR 조건중 어느 하나라도 인텍스가 없으면 FULL TABLE SCAN으로 풀리기 쉽죠. OR 연산을 튜닝하는 방법을 몇가지 소개해 드립니다. 예제) 매출테이블(T_TRADE)에서 상점(ID: A, B) 인 상점의 특정 거래일(TR_DT) 동안의 총 매출액(AMT)를 구하라. 1. OR 조건을 UNION ALL로 풀어냄 : 쉽게 작성할 수 있으나 SQL이 풀어낸 개수만큼 늘어나 유지보수가 어려움. SELECT ID, SUM(AMT) FROM ( SELECT AMT FROM T_TRADE WHERE TR_DT IN (SELECT DT FROM COPY_YMD_T WHERE DT BETWEEN '시작일' AND '..
group by 절에 사용한 함수 (decode 포함) 함수는 select 절에 기술되어 있어도 동작하지 않습니다. 즉 그룹핑할 때 한번만 수행이 됩니다. 이것을 이용하면 group 조건이 아닌 컬럼의 값을 사용할 수가 있어 손쉽게 데이터를 얻을 수 있습니다. ex) select decode(제품코드, '1', 'xxx', '2', decode(다른컬럼, '2'', ...) , count(*) from 매출 group by decode(제품코드, '1', 'xxx', '2', decode(다른컬럼, '2'', ...) ==> 예제가 딱히 생각이 나지 않아서 대충 적었습니다. 매출 집합에서 제품코드별 거래 건수를 알고 싶은데 특정 제품은 다른 조건 예를 들어(특판일 경우) 등등에 따라 거래 건수를 분리하고..
Oracle] 실행계획 보는 법 ***설명 플랜에서 나오는 각 라인을‘로우 소스(Row Source)’라고 한다. 플랜을 보면서 처리 순서를 판단하는 것은 간단하다. 플랜은 트리 형태로 되어 있으며, 자신보다 하위 레벨이 있으면 하위 레벨부터, 같은 레벨이라면 위(상)의 로우소스부터 실행 된다. 위플랜의‘Optimizer=CHOOSE’에서알수있듯이해당SQL 문장은 옵티마이저 모드가 CHOOSE에서 플랜이 만들어진 것이다. 또한 플랜에서 ‘Cost=’의 항목이 나오면CBO로 풀렸다는 것이다. RBO인지 CBO인지의 판단은 옵티마이저 모드의 항목으로 판단하는 것이 아니라 ‘Cost=’로 판단한다는 것에 주의하자. 위 플랜에서 2개의 테이블 DEPT와 EMP 테이블 각각의 액세스 경로를 확인할 수 있다. 모두..
주민등록번호와 같이 값의 길이가 일정한 컬럼 즉 고정길이 컬럼에만 char형을 사용하고 값의 길이가 제각각인 컬럼엔 varchar 형을 사용해야 합니다. char(5) 형인 컬럼에 'aaaa' 란 값을 넣으면 실제로 'aaaa ' 처럼 뒤에 한자리 공백이 들어 갑니다. 이렇듯 의도하지 않은 곳에 공백이 들어갈 수 있어 sql문에서 의도하지 않은 결과를 낳을 수 있습니다. 한가지 예로 where 절에서 고정길이 컬럼인 A 값을 비교할 때 A='aaaa' 라고 해도 'aaaa ' 값을 찾을 수 있지만 A = DECODE(1,1,'aaaa','etc') 라고 하면 찾지를 못합니다. 즉 decode 문을 통해 나온 값은 공백이 있는 A 컬럼과 비교할 수 없는 것입니다. 고정길이 컬럼에만 char 형을 사용 이란..
처음에는 사용하던 컬럼이 시간이 지남에 따라 사용되지 않을 경우에 테이블을 삭제하고 다시 이관하는 작업이 쉽지 않기 때문에 그냥 계속 사용하여 공간만 낭비하는 경우가 있습니다, 이때 UNUSED를 사용해서 컬럼을 안보이게 할 수 있습니다. 형식) alter table table_name set unused (column_name); .unused 된 컬럼은 다시 되살릴 수 없음 .동일한 컬럼명으로 새롭게 추가할 수는 있음.
1. HOLD_CURSOR : PARSE COUNT 횟수를 줄임. 즉 SQL문이 재실행될 때 이미 PARSE된 정보를 재사용하게 함. ex) EXEC ORACLE OPTION (HOLD_CURSOR = NO) : 재사용 안함 EXEC ORACLE OPTION (HOLD_CURSOR = YES) : 재사용, 자주 사용되는 SQL문을 저장 2. RELEASE_CUROSR : CURSOR_Cache 영역과 Library Cashe 영역간의 관계를 해제하거나 유지함. ex) EXEC ORACLE OPTION ( RELEASE_CURSOR = NO) : CUROSR_Cache, 영역에 저장된 SQL문에 대한 PARSE 정보를 저장하는 Library Cashe 영역의 관계를 유지. EXEC ORACLE OPTION..
- Total
- Today
- Yesterday
- 매직 트랙패드2
- 유가바이트디비
- 고체 향수
- 르세라핌
- 홈 오피스
- 루미큐브 종류
- 파나소닉 비데 DL-EH10KWS
- 브리다 정수기
- 배당급
- GKRS
- 증권정보포털
- node.js
- Life Chair
- 로니카 BCS
- 카카오 에드
- 톡토기
- 남설 팔찌
- 화분벌레
- 별이 빚나는 밤
- VARIDESK
- weka
- Pixel Pals
- 솔리드 쿨론
- 오미크론
- 코라나 19
- 별잉 빛나는 밤
- Sybase IQ
- yugabyteDB
- JMW 헤어드라이기기
- 빈센트 반 고흐
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 31 |