문제

일련의 행을 반환하는 Informix SQL 쿼리가 있습니다. 우리가 작업 한 사이트의 새 버전에 대해 약간 수정되었으며 QA는 새 버전이 다른 결과를 반환한다는 것을 알았습니다. 조사 후 우리는 두 쿼리 사이의 유일한 차이점이 반환 된 필드 수에 있다는 것을 발견했습니다.

조항에 의한, 어디에서, 순서에서 순서가 동일하고 선택 부분의 열 이름은 결과에 영향을 미치지 않았습니다. 문제를 일으킨 분야의 수였습니다.

어떤 아이디어?

도움이 되었습니까?

해결책 2

Informix SQL 엔진은 검색하려는 열을 기반으로 테이블의 지수를 사용합니다. 다른 열을 검색 할 때 다른 지수를 사용하여 결과를 다른 순서로 얻었습니다.

다른 팁

첨가 --+ ORDERED 가입 주문 지시문은 매번 예측 가능한 순서로 결과를 얻을 수 있도록하여 문제를 해결합니다.

링크는 지침의 작동 방식에 대한 설명으로 이동합니다.http://publib.boulder.ibm.com/infocenter/idshelp/v10/index.jsp?topic=/com.ibm.sqls.doc/sqls1144.htm

정렬 된 결합 주문 지시문을 사용하여 Optimizer가 쿼리의 From Clause에 나타나는 순서대로 테이블 또는 뷰를 결합하도록 강요하십시오.

SELECT --+ ORDERED
   name, title, salary, dname
FROM dept, job, emp WHERE title = 'clerk' AND loc = 'Palo Alto' 
   AND emp.dno = dept.dno 
   AND emp.job= job.job;

'필드'로 출력 데이터 행의 수를 의미한다고 생각하십니까? 내 경험상 사람들은 '필드'와 '칼럼'을 동의어로 사용합니다. Select-List의 이름이 변경되지 않았다는 점을 감안할 때, 아마도 반환 된 행의 수에서만 차이를 얻었을 것입니다.

동일한 테이블, 입력 데이터 및 쿼리가 주어지면 결과 세트의 크기와 내용은 쿼리 계획 또는 서버 버전에 관계없이 동일해야합니다. 결과 세트의 시퀀싱은 결과에 주문을 부과하지 않는 한 다를 수 있지만 모든 DBM에서는 합법적입니다.

다양한 크기의 결과 세트를 얻는 경우 IBM 기술 지원에 문의해야합니다. 결과 세트 중 하나 이상이 잘못되었으며 잘못된 결과는 항상 심각합니다.

힌트는 성능에 도움이 될 수 있지만 '적절한 옵션 세트와 함께 업데이트 통계 실행 (적절한 옵션 세트)'의 표준 조언은 일반적으로 도움이되지만, 인덱스의 존재 또는 부재는 기본 데이터가 안정적 일 때 결과 세트를 변경해서는 안됩니다. (데이터가 바뀌면 걱정할 다양한 문제와 합병증이 있습니다.)

나는 이것에 대한 두 가지 설명 만 생각할 수 있습니다.

  1. COUNT (고유 한 열)와 같이 집계 함수가 사용됩니다.
  2. 선택되는 추가 열은 외부에 결합 된 테이블에서 나온 것입니다.

SQL과 테이블 정의를 게시하고 싶지 않지만 진단하기가 어렵다는 것을 알고 있습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top