또한 Oracle을 사용하고 있다고 가정합니다. 또한 처음에는 설명 계획 웹 페이지를 체크 아웃하는 것이 좋습니다. 최적화에는 많은 부분이 있지만 학습 할 수 있습니다.
몇 가지 팁은 다음과 같습니다 누군가의 작업이 최적화
첫째, 그들은 거의 항상 적절한 성능보다는 궁극적 인 성능을 찾고 있습니다. 쿼리의 실행 시간을 3 분에서 3 초로 줄이면 요청할 때까지 2 초로 줄일 수 있습니다.
둘째, 최적화중인 쿼리가 논리적으로 올바른지 확인하려면 빠른 확인을 수행하십시오. 그것은 불합리하게 들리지만, 느린 실행 쿼리에 대한 조언을 구한 횟수를 말할 수는 없으며 때로는 오답을주는 경우가 있습니다. 그리고 결과적으로 쿼리를 디버깅하는 것이 속도를 향상시키는 것으로 나타났습니다.
특히, 설명 계획에서 "Cartesian Join"구를 찾으십시오. 거기에서 보게되면 의도하지 않은 데카르트 조인을 발견했을 가능성이 아주 큽니다. 의도하지 않은 데카르트 조인의 일반적인 패턴은 FROM 절이 쉼표로 구분 된 테이블을 나열하고 조인 조건이 WHERE 절에 있다는 것입니다. 하나의 조인 조건이 누락되어 있다는 점을 제외하면 Oracle은 데카르트 조인을 수행 할 수밖에 없습니다. 대형 테이블의 경우 성능이 저하됩니다.
질의가 논리적으로 정확한 Explain plan에서 Cartesian Join을 볼 수는 있지만 이전 버전의 Oracle과 연관시킵니다.
또한 사용되지 않은 화합물 색인을 찾으십시오. 복합 인덱스의 첫 번째 열이 쿼리에 사용되지 않으면 오라클은 비효율적으로 인덱스를 사용하거나 전혀 사용하지 않을 수 있습니다. 저를 예를 들어 보겠습니다 :
쿼리이었다 :
select * from customers
where
State = @State
and ZipCode = @ZipCode
합니다 (DBMS는 오라클은하지 않았다, 그래서 구문은 달랐다, 나는 원래의 구문을 잊어 버린).
인덱스를 빠르게 살펴 보면 (국가, 주, 우편 번호) 열이있는 고객의 인덱스가 순서대로 나타납니다. 나는
select * from customers
where Country = @Country
and State = @State
and ZipCode = @ZipCode
을 읽을 수있는 쿼리를 변경하고 최적화 좋은 이점에 인덱스를 사용할 수 있었기 때문에 지금은 대신 약 6 분 6 초 만에 달렸다. 나는 응용 프로그램 프로그래머에게 그들이 조건에서 국가를 생략 한 이유를 물었습니다. 그리고 이것은 그들의 답변이었습니다. 그들은 모든 주소가 'USA'와 동등한 국가라는 사실을 알고 있었기 때문에 그 기준을 벗어나서 쿼리의 속도를 높일 수 있다고 생각했습니다!
데이터베이스 검색을 최적화하는 것은 계산 시간을 면제하는 것과 실제로 같지 않습니다. 여기에는 데이터베이스 디자인, 특히 인덱스와 적어도 최적화 프로그램이 어떻게 수행되는지에 대한 개요가 포함됩니다.
일반적으로 옵티 마이저를 능가하려고 시도하는 대신 옵티 마이저를 사용하여 공동 작업하는 것이 더 나은 결과를 얻을 수 있습니다.
최적화가 완료되면 행운을 빌어 요!
도움을 주시면 감사하겠습니다. 특히 링크를 클릭하십시오. 그것은 나에게 지금부터 만들기 시작하고있다. 도움에 다시 한번 감사드립니다. –
인덱스를 사용하지 않는 조인은 좋지 않을 수 있으며 절대적으로 최상일 수 있습니다.그것은 모두 의존합니다. 색인으로 모든 전체 테이블 스캔을 제거하려고 시도하지 마십시오. –