Informix SQL 쿼리 : 다른 결과를 반환하는 두 개의 유사한 쿼리
문제
일련의 행을 반환하는 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 기술 지원에 문의해야합니다. 결과 세트 중 하나 이상이 잘못되었으며 잘못된 결과는 항상 심각합니다.
힌트는 성능에 도움이 될 수 있지만 '적절한 옵션 세트와 함께 업데이트 통계 실행 (적절한 옵션 세트)'의 표준 조언은 일반적으로 도움이되지만, 인덱스의 존재 또는 부재는 기본 데이터가 안정적 일 때 결과 세트를 변경해서는 안됩니다. (데이터가 바뀌면 걱정할 다양한 문제와 합병증이 있습니다.)
나는 이것에 대한 두 가지 설명 만 생각할 수 있습니다.
- COUNT (고유 한 열)와 같이 집계 함수가 사용됩니다.
- 선택되는 추가 열은 외부에 결합 된 테이블에서 나온 것입니다.
SQL과 테이블 정의를 게시하고 싶지 않지만 진단하기가 어렵다는 것을 알고 있습니다.