2010-04-20 4 views
3

보고서 생성 응용 프로그램이 작동하지 않는다는보고를 받았습니다. 처음 조사한 후 SQL 트랜잭션이 시간 초과됨을 발견했습니다. 더 작은 항목 선택에 대한 쿼리가 결과를 반환하는 데 더 오래 걸리는 이유에 대해 나는 신비 스럽다.SQL 쿼리 기간이 더 작은 데이터 집합의 경우 더 길습니까?

빠른 쿼리 (평균 반환 사초) :

SELECT * FROM Payroll WHERE LINEDATE >= '04-17-2010'AND LINEDATE <= '04-24-2010' ORDER BY 'EMPLYEE_NUM' ASC, 'OP_CODE' ASC, 'LINEDATE' ASC 

긴 쿼리 (평균 일분 반환 20초) :

SELECT * FROM Payroll WHERE LINEDATE >= '04-18-2010'AND LINEDATE <= '04-24-2010' ORDER BY 'EMPLYEE_NUM' ASC, 'OP_CODE' ASC, 'LINEDATE' ASC 

나는 간단하게하는 SqlCommand에 제한 시간을 증가시킬 수있다, 쿼리가 오랜 시간이 걸린다는 사실은 변하지 않습니다.

왜 항목의 하위 집합을 요청하면 더 많은 데이터를 반환하는 쿼리보다 시간이 오래 걸릴까요? 이 쿼리를 어떻게 최적화 할 수 있습니까?

+0

이것은 MSSQL Sharepoint 데이터베이스에서 제거됩니다. 급여 테이블은 실제로 특정 작업에 대한 청구 가능 시간을 생성하기 위해 Sharepoint 목록 및 Project Web Access에서 필드를 가져 오는 '보기'입니다. –

답변

2

대부분의 경우, 범위가 길어질수록 옵티마이 저가 인덱스 스캔 대신 정렬을 사용하여 전체 테이블 스캔을 선택하게되어 더 빠릅니다.

인덱스 통과는 여러 가지 이유로 테이블 스캔보다 오래 걸릴 수 있습니다.

예를 들어, 테이블 자체는 캐시에 완전히 들어갈 수 있지만 동시에 테이블과 인덱스에는 맞지 않을 수 있습니다.

+0

충분히 닫으십시오. 이것을 조사하는 방법에 대한 약간의 독서 후. 실행 계획에는 해시 일치 및 클러스터 된 인덱스 검색을 검색하는 두 개의 추가 분기가 표시됩니다. –

0

게다가 LINEDATE 열에 색인이 없습니다. 이것은 사용하는 데이터베이스 서버에 따라 액세스를 최적화하기 위해 쿼리 계획에 영향을주는 통계를 유지 관리하는 데이터베이스가 있습니다.

Informix의 경우. 당신은 UPDATE STATISTICS statment를 할 것입니다. SET EXPLAIN ON을 사용하여 쿼리 계획의 비용을 조사 할 수 있습니다.

비슷한 내용의 문서를 확인하십시오.

관련 문제