2011-12-12 2 views
1

내 관리자가 재귀 쿼리를 사용하지 않도록 요청했습니다. 재귀라는 것은 기본적으로 느린 것을 의미하기 때문입니다.재귀 쿼리가 느립니?

재귀 쿼리가 느려지는지 궁금 해서요. 그리고 다른 대안적인 방법이 있다면.

편집 : 일반적으로 재귀 쿼리에 대해 말하고 있습니다. 저의 관리자는 재귀 적 사용을 중단하라고했습니다. 그의 주장은 C에서 재귀 함수가 느리다. 따라서 오라클에 대해서는 재귀 쿼리를 사용하지 마십시오. 오라클 역시 느릴 수 있습니다.

+0

달성하고자하는 목표와 현재 수행 방법을 Google에 보여 주며 대체 방법을 제안 할 가능성이 있습니다. –

+0

쿼리의 행 수는 얼마입니까? 귀하의 질의에 대한 색인이 생성 되었습니까? 이 쿼리를 몇 번이나 수행합니까? 나는 그 질문이 조금 애매하다고 생각한다. – danihp

+0

나는 일반적으로 말하고있다. 재귀 쿼리는 일반적으로 느려지므로 피해야합니까? – n3xus

답변

3

성능 문제에있어서 벤치 마크 만 중요합니다. 추측과 유추는 쓸모가 없습니다.

재귀 쿼리는 재귀 적이기 때문에 잘못 수행해야하는 절대적인 이유가 없습니다. 일반적으로 재귀 쿼리는 비슷한 크기의 테이블에 대한 비 재귀 쿼리보다 큰 데이터 세트에 비해 더 비쌉니다.

이것은 재귀 쿼리를 절대로 사용하지 않기위한 인수가 아닙니다. 대표적인 데이터 볼륨에 대한 CONNECT BY 쿼리를 테스트하고 성능 문제가 있는지 여부를 확인하기위한 인수입니다. 재귀 쿼리를 피하기위한 메커니즘 (예 : 병합 된 계층 구조를 저장하는 테이블 유지 관리)에는 자체 비용 프로파일이 있습니다.

재귀 쿼리의 대안에 대해 더 자세히 알고 싶다면 잠시 후에 관련 질문에 대답했습니다. Check it out..

+0

+1 * 유익한 추측은 쿼리를 최적화 할 때 때로는 가치가있을 수 있지만 RDBMS조차도 아닌 뭔가에 대해 그려지는 잘못된 비유는 PHB- 행동이 가장 중요합니다. –

2

일반적으로 재귀 적으로 느릴 필요는 없습니다.

나는 누군가가 그 문제에서 무시되어야한다는 증거로서 그러한 일반적인 의사적인 사실을 말하고 있다는 단순한 사실을 생각해 보겠다.

재귀 코드를 작성하면 실제로 실행되는 내용을 알 수 없습니다. 소스 코드와 실제로 실행되는 것 사이에 많은 일이 발생할 수 있습니다.

즉 : 재귀가 느리거나 많은 메모리를 사용하거나 스택 오버 플로우가 발생하는 경우가 많습니다.

하지만 재귀가 가장 간단한 해결 방법입니다.

그래서 문제가 발생하면 재귀를 사용하여 해결할 수 있습니다. 해.

그런 다음 성능과 확장 성이 적절한 지 테스트하십시오. 그렇지 않은 경우 솔루션을 조정하는 동안 (재귀를 제거하여) 재귀 구현을 test oracle으로 사용할 수 있습니다.