Oracle Analytic Functions는 비용이 많이 소요됩니까?
오라클 분석 기능을 사용할 때 느린 성능을 경험한 사람이 있습니까?lead() oracle analytic 함수를 사용하여 표에 새 필드를 생성했습니다.기본적으로 이전 행의 필드 값을 현재 행의 새 필드 값으로 사용할 수 있습니다.설명 계획은 오라클 분석 함수가 사용된 테이블에 대해 전체 테이블 스캔이 수행되었음을 나타냅니다.
이 전체 테이블 검색 비용을 방지하려면 삽입/업데이트 후 트리거를 사용하여 이전 행의 값으로 특정 필드를 수동으로 채워야 할 수 있습니다.
오라클 분석 기능이 비용이 많이 들어 사용하지 않기로 결정한 사람이 있습니까?오라클 분석 함수를 거의 사용하지 않아야 합니까?
분석 함수는 비용이 없는 것이 아닙니다. 메모리가 필요한 중간 결과(실행 합계, 윈도우 함수 등)를 위해 데이터를 저장해야 하며 처리 능력도 어느 정도 필요합니다.일부 함수는 결과 집합의 마지막 행을 가져와야 결과를 반환할 수 있습니다(예: MIN/MAX).대부분의 함수는 암시적 SORT 연산도 수행합니다.
따라서 리소스 측면에서 자유롭지는 않지만 SET 작업이므로 대부분의 경우 사용자 지정 행별 plsql 프로시저나 기존 SQL을 작성하는 것보다 훨씬 효율적입니다.
구체적인 사례를 비교하고 벤치마킹해야 하겠지만, 이를 현명하게 사용한다면 장애가 아니라 강력한 성능 도구임을 알 수 있을 것입니다.
이것은 테이블이 색인화되는 방식과 사용하는 기능에 따라 달라집니다.
ROW_NUMBER()
, 예를 들어, 보다 덜 효율적인 것 같습니다.ROWNUM
, 인덱스를 사용해도 상관없습니다.성능 비교는 블로그에서 이 기사를 참조하십시오.
Oracle
의 옵티마이저는 윈도우 기능에 대해 알고 있으며 다음과 같은 몇 가지 트릭을 사용할 수 있습니다.STOPKEY
그리고.PUSHED RANK
그들을 더 효율적으로 만들어 줄 겁니다.
설명 계획은 오라클 분석 함수가 사용된 테이블에 대해 전체 테이블 스캔이 수행되었음을 나타냅니다.
테이블 스캔 자체는 나쁘지 않습니다.이것은 정말로 최적일 수 있습니다.TABLE ACCESS
인덱스에 누락된 값을 검색하는 것은 필터링 및 정렬보다 비용이 많이 듭니다.
일반적으로 테이블이 색인화되어 있는 경우 쿼리WHERE
그리고.ORDER BY
절들은 주문을 위해 이 지수를 사용할 수 있도록 허용하고 옵티마이저는 이 지수를 사용할 가치가 있다고 생각합니다.WINDOW BUFFER
메소드가 사용됩니다.LAG
그리고.LEAD
기능들.
엔진은 단지 작동하는 버퍼를 유지합니다.2
행(또는 오프셋 값에 따라 그 이상)을 선택하고 첫 번째 행과 두 번째 행의 값을 반환합니다.
그러나 최적화자는 인덱스를 전혀 사용할 가치가 없다고 간주할 수 있습니다.
이 경우에는 다음을 사용할 것입니다.WINDOW SORT
또는 같은 것이지만 정렬은 메모리나 임시 테이블 공간에서 이루어집니다.
이에 대한 자세한 내용은 조나단 루이스의 블로그에서 확인할 수 있습니다.
실제로 문제는 그들이 대안보다 비용이 더 많이 들거나 덜 들까 하는 것이어야 하며, 그것은 특정한 상황으로 귀결될 것입니다.어떤 경우에는 일반적으로 해당 수준의 하드웨어를 추가로 보유하는 것이 더 저렴하고 쉽다는 이유만으로 데이터를 앱 서버로 가져와 처리하는 것이 더 나을 수도 있습니다.
하지만 SQL에서 하는 것과 PL/SQL 처리를 추가하는 것 중에서 선택할 수 있는 것을 고려한다면, 저는 일반적으로 SQL을 사용할 것입니다.
물론 비용도 있고 지불할 수 있는지 여부도 결정해야 합니다.
저의 경우 오라클 lead() 함수를 이용하여 테이블을 반복하고 일부 날짜를 계산하여 다른 테이블에 결과를 저장하는 저장 프로시저를 만들었습니다.마지막으로, 저는 앱에서 이 나중의 테이블을 사용하고 그 데이터가 자주 바뀌지 않기 때문에 (저장된 절차를 실행하는) 첫 번째 테이블을 일주일에 한 번 업데이트합니다.
저에게는 이것이 최고의 해결책이었습니다.
언급URL : https://stackoverflow.com/questions/1467018/are-oracle-analytic-functions-costly
'programing' 카테고리의 다른 글
Android Material과 Appcat Manifest 병합 실패 (0) | 2023.10.23 |
---|---|
AngularJS: ngResource로 성공 및 오류 콜백을 처리하는 방법? (0) | 2023.10.23 |
트리거 cs가 JS와 함께 호버 (0) | 2023.10.23 |
새로 고침 없이 웹 페이지에 변경사항 푸시 (0) | 2023.10.23 |
파이썬 클래스에서 메소드를 주문하는 좋은 방법은 무엇입니까? (0) | 2023.10.23 |