2012-04-27 13 views
1

내 질문은 T-SQL, SQL Server 환경에 뿌리를두고 있지만 그 범위는이 기술에만 국한되지 않습니다. 필자는 기존의 뷰, 스토어드 프로 시저 및 새로운 것들을 디자인 할 수있는 매우 복잡한 비즈니스 로직을 가진 데이터베이스 작업을하고 있습니다. 서로 다른 쿼리 나 그 중 일부의 비교를 통해 다른 작업으로 같은 작업을 수행하는 섹션이 있다는 강한 느낌을 갖지만 전체 엉망을 리펙토링하는 것은 물론 그 느낌이 더 필요합니다. 그래서 나는 임을 입증하는 방법을 결정하려고하는데 두 문장이 동등한 것입니다.쿼리 동등성 평가

분명하지만 약한 응답은 두 개의 쿼리 A와 B가 동일한 레코드 세트를 생성한다는 것을 확인할 수 있습니다. A가 B의 하위 집합이고 B가 A의 하위 집합 인 경우 동일한 레코드 집합입니다. 물론 레코드 세트가 쿼리가 아니기 때문에 결과가 데이터 및 특정 매개 변수 값에 의존 할 수 있기 때문에 이것이 좋은 아이디어라고 확신하지는 못합니다. 내 질문은 : 두 가지 다른 쿼리의 동등성을 증명하는 방법이 있습니까? 데이터베이스에 의해 수행되는 최적화가 이에 따라 작동해야하기 때문에 나는 그렇다고 말할 것이다. 누군가 나에게 문서 나 책에 대한 포인터를 제공 할 수 있습니까? 등가성을 증명할 일반적인 방법이 없다면, 직업을 수행하는 효과적인 발견 적 방법에 따라 수행 된 회귀 테스트를 기반으로하는 영리한 접근이 있습니까?

나중에 편집 : 관계형 대수를 사용하여 쿼리를 직접 (리버스 엔지니어링) 리버스 엔지니어링하면 다른 쿼리 및/또는 컴퓨터 대신 쿼리 동등성을 평가하는 뛰어난 방법이 될 수 있습니까? 이 "역 엔지니어링"을 수행하는 데 도움이되는 자동화 도구가 있습니까?

덕분에 당신은 두 쿼리의 실행 계획을 확인할 수 있습니다

+0

http://stackoverflow.com/questions/4868364/how-to-prove-2-sql-statements-are-equivalent 및 http://dl.acm.org/citation.cfm?id=111212&dl= –

답변

1

문제가 NP 완료된 것으로 보일 수 있으므로 아마 증명할 수 없습니다. SO question on query equivalence을 확인하십시오 (그 중 하나는 오라클에 관한 것이지만, 당신과 관련된 몇 가지 대답/링크가 있습니다).

0

을 돕는 많은. 그들이 동일하면, 당신은 당신의 대답을 가지고 있습니다!

+0

옵티마이 저의 최선의 노력을 무너 뜨리는 꽤 과장된 쿼리를 작성할 수도 있지만, 실제로는 (결과적으로 심각하게 하위 최적 임에도 불구하고) 같은 결과를 계산합니다. –

0

실행 계획을 통해서만 확인할 수 있습니다. 그렇다고해서이 것을 증명할 방법이 없다고 생각합니다.

+0

필자는 이것이 충분하지만 필수 조건은 아니라고 주장합니다. 모든 경우에 동일한 결과 집합을 반환하지만 실행 계획이 다른 두 개의 쿼리를 볼 수 있습니다. –

0

DBMS에서 생성 된 "최적의 쿼리 계획"은 비 결정적 일 수있는 몇 가지 "표준 쿼리 계획"생성기를 구현해야합니다. 대부분의 경우 용어와 테이블을 사전 순으로 정렬하여 타이 브레이커로 사용하게됩니다.

0

난 당신이 공식적으로 입증 할 수있을하거나 반증하지만

  • 모든 사용 사례
  • 모든 매개 변수를 식별 모든 경계 값을 식별 식별이 걸릴 내이 될거야 의심

은 그로부터 테스트 계획을 파생시킵니다.그것은 당신이 할 수있는, 당신은 테스트 후 차이를 찾을 수없는 경우 해당 데이터에 대한 두 쿼리는

  • 이 결과
  • 비교 각각의 경우에 대해

  • 실행 testdata로를 만들

    • 당신을 필요로 은 합리적으로이어야합니다. 두 진술은 모두 동일해야합니다.