Oracle 초급 성능 최적화 총화

11443 단어 Oacle
머리말
Oracle 데이터베이스 조회 성능 최적화 에 대한 간단 한 요약지금까지 데이터 베 이 스 를 최적화 하 는 것 은 모두 어 려 운 임무 이다.빅 데 이 터 량, 잦 은 시스템 방문, 최적화 작업 이 특히 중요 하 다.Oracle 시스템 의 유연성, 복잡성, 성능 문제 의 원인 다양성 과 Oralce 데이터베이스 의 동태 적 특성 으로 인해 Oracle 데이터베이스 관리 에서 가장 어 려 운 분야 로 최적화 되 었 다.데이터 베 이 스 를 잘 모 르 는 프로그래머 로 서 저도 가장 기본 적 인 것 부터 시작 해서 Oracle 의 기 초 를 파악 하 는 것 을 천천히 배 울 수 밖 에 없습니다.
예시
1 、 select 사용 하지 않 기 *
selection 자구 에 모든 column 을 표시 하려 면 "select *" 를 사용 하 는 것 이 편리 한 방법 입 니 다.불 행 히 도 이것 은 비효 율 적 인 방법 이다.실제로 오 라 클 은 분석 과정 에서 '*' 를 순서대로 모든 열 이름 으로 변환 하 는데 이 작업 은 데이터 사전 조 회 를 통 해 이 루어 진 것 으로 더 많은 시간 이 걸 릴 것 임 을 의미한다.
---     
select * from Table_Name1 
---     
select columnname1,columnname2,columnname3 from Table_Name1

 
2. 표 의 별명 을 사용 하여 SQL 구문 에 여러 표를 연결 할 때 표 의 별명 을 사용 하고 별명 을 각 column 에 접두사 하 십시오.이렇게 되면 해석 시간 을 줄 이 고 column 의 잘못된 의미 로 인 한 문법 오 류 를 줄 일 수 있 습 니 다.column 의 다른 의 미 는 SQL 의 서로 다른 표 가 같은 column 이름 을 가지 기 때문에 SQL 구문 에 이 column 이 나타 날 때 SQL 해상도 기 는 이 column 의 귀속 을 판단 할 수 없습니다.
---     
select columnname from Table_Name1 t1,Table_Name2
---     
select t1.columnname from Table_Name1 t1,Table_Name2

 
3. 인 을 Exists 로 대체 하 는 많은 기초 표를 바탕 으로 하 는 조회 에서 한 조건 을 만족 시 키 기 위해 다른 표를 연결 해 야 한다.이러한 상황 에서 exists (또는 not exists) 를 사용 하면 검색 의 효율 을 높 일 수 있다.
예: 매점 에서 물건 (상품) 을 사고 재고 표 Table 1 이 있 으 면 물건 을 사고 출고 표 Table 2. 재고 중의 상품 을 찾 아 팔 린 것 이 있 는 지, 있 으 면 재고 정 보 를 출력 한다.
--     
SELECT column_name
FROM table_name1
WHERE column_name IN
( SELECT column_name
  FROM table_name2)
---     
SELECT column_name
FROM table_name1 outer
WHERE EXISTS
  (SELECT 1
  FROM table_name2 inner
  WHERE inner.column_name = outer.column_name)

 
4. not in 대신 not exists 를 사용 하여 하위 검색 에서 not in 자 구 는 내부 정렬 과 통합 을 수행 합 니 다.그런 상황 에서 도 not in 은 비효 율 적 입 니 다.not in 을 사용 하지 않도록 외부 연결 (outer join) 이나 not exists 로 바 꿀 수 있 습 니 다.
---     
select columnname,columnname1 from Table_Name1 
where id not in(select id from Table_Name2 where name='A')
---     
select columnname,columnname1 from Table_Name1 t1,Table_Name2 t2 
where t1.id=t2.id
and t2.name<>'A'
---     
select columnname,columnname1 from Table_Name1 t1
where not exists(select 1 from Table_Name2 t2
where t2.id=t1.id
and t2.name='A')

 
5. 표 연결 로 Exists 를 교체 하 는 것 은 일반적으로 표 연결 방식 으로 Exists 보다 효율 적 입 니 다. 그러나 많은 경우 에 우 리 는 Exists 를 연결 로 개편 할 수 없습니다.
---     
select columnname,columnname1 from Table_Name1 t1
where not exists(select 1 from Table_Name2 t2
where t2.id=t1.id
and t2.name='A')
---     
select columnname,columnname1 
from Table_Name1 t1
join Table_Name2 t2 on t1.id=t2.id
where t2.name='A'

 
6. exists 로 distinct 교체
다 중 표 정보 (예 를 들 어 부서 표 와 직원 표) 를 포함 하 는 조 회 를 제출 할 때 select 문구 에 distinct 를 사용 하지 않도록 합 니 다. 일반적으로 Exists 로 교체 하 는 것 을 고려 할 수 있 습 니 다. Exists 는 조 회 를 더욱 빠르게 합 니 다. RDBMS 핵심 모듈 은 하위 조회 조건 이 만족 되면 바로 결 과 를 되 돌려 주기 때 문 입 니 다.
예: 매점 에서 물건 (상품) 을 사고 재고 표 Table Name 1 이 있 으 면 출고 표 Table Name 2. 재고 에 있 는 상품 을 찾 아 판매 되 는 것 이 있 는 지 확인 하고 있 으 면 재고 정 보 를 출력 한다.
--     
SELECT DISTINCT t1.column_name
FROM table_name1 t1, table_name2 t2
WHERE t1.column_name = t2.column_name;
---     
SELECT column_name
FROM table_name1 outer
WHERE EXISTS
  (SELECT 1
  FROM table_name2 inner
  WHERE inner.column_name = outer.column_name)

 
7. 사용 > = 교체 > id 에 색인 이 있 으 면:
///     
select * from EMP where id>3;
//     
select * from EMP where id>=4;

두 가지 차이 점 은 후 자 는 첫 번 째 id 가 4 와 같은 기록 으로 직접 이동 하고 전 자 는 먼저 id = 3 의 기록 으로 위치 하고 첫 번 째 id 가 3 보다 큰 기록 으로 스 캔 하 는 것 이다.
 
8. OR 를 UNION 으로 대체 하 는 경우, where 자구 의 OR 를 UNION 으로 대체 하 는 것 이 좋 습 니 다. OR 를 사용 하면 전체 표 스 캔 이 가능 합 니 다. 상기 규칙 은 여러 색인 열 에 만 유효 합 니 다. 검색 효율 은 OR 를 선택 하지 않 아 떨 어 질 수 있 습 니 다.
---     
select id,name,reg where Table_Name1 where id=10 or reg='A'
---     
 select id,name,reg from Table_Name1 t1 where t1.id=10
 union
 select id,name,reg from Table_Name2 t2 where t2.reg='A'

물론 이상 은 id 열 과 reg 열 을 기반 으로 색인 열 입 니 다.
 
9. UNION - ALL 로 UNION 을 교체 합 니 다. SQL 문 구 는 UNION 두 개의 검색 결과 집합 이 필요 할 때, 이 두 개의 결과 집합 은 UNION - ALL 방식 으로 합 쳐 져 최종 결 과 를 출력 하기 전에 정렬 되 고, 중복 기록 을 걸 러 냅 니 다. UNION ALL 로 UNION 을 대체 하면 정렬 이 필요 하지 않 아 효율 이 높 아 집 니 다. 주의해 야 할 것 은 UNION ALL 이 반복 적 으로 지 는 것 입 니 다.두 결과 집합 에 동일 한 기록 이 나 오기 때문에 UNION ALL 의 사용 가능성 을 업무 수요 분석 에서 분석 해 야 한다.
---     ,      
 select id,name,reg from Table_Name1 t1 where t1.id=10
 union
 select id,name,reg from Table_Name2 t2 where t2.id=10
---select id,name,reg from Table_Name1 t1 where t1.id=10
 union  all
 select id,name,reg from Table_Name2 t2 where t2.id=10

고려 할 때 도 반드시 업무 의 수 요 를 바탕 으로 취사선택 을 해 야 한다.
 
10. 색인 열 에 IS NULL 과 IS NOT NULL 을 사용 하지 않도록 합 니 다. 열 에 빈 값 이 포함 되 어 있 으 면 색인 에 이 기록 이 존재 하지 않 습 니 다. 복합 색인 에 대해 서 는 각 열 이 비어 있 으 면 색인 에 도 이 기록 이 존재 하지 않 습 니 다. 최소한 한 열 이 비어 있 지 않 으 면 색인 에 기록 합 니 다. 빈 값 은 색인 열 에 존재 하지 않 기 때문에 where 자구 에 색인 이 존재 하지 않 습 니 다.열 을 빈 값 으로 비교 하면 Oracle 은 이 색인 을 사용 하지 않 습 니 다.
---     
 select id,name,reg from Table_Name1 t1 where t1.id is not null
---     
select id,name,reg from Table_Name2 t2 where t2.id>=10

색인 열
총결산
 이 절 은 잠시 여기까지 정리 한 후에 계속 정리 하 는 것 이 유용 하 다 고 생각 합 니 다. 그리고 일상적인 업무 에서 실천 을 하고 자신의 능력 을 개선 해 야 합 니 다. 위 에서 정리 한 것 은 모두 일반적인 방법 입 니 다. 물론 구체 적 인 최적화 는 구체 적 인 환경 에 따라 처리 해 야 합 니 다. 처리 방식 은 복잡 하고 변화 가 많 지만 그 종류 와 떨 어 지지 않 습 니 다. 만약 에 잘못 이 있 으 면 신속하게 통 하 십시오.감사합니다.

좋은 웹페이지 즐겨찾기