2010-07-30 4 views
2

우리는 SQL Server 2008을 사용하고 있습니다. 우리는 response_id라는 기본 키를 가진 response라는 테이블을 가지고 있습니다. 또한 bid_id라는 열이 있습니다. 우리가 쿼리SQL 2008 - resultset order issue

을 실행하면 '응답 SELECT * FROM 곳 bid_id = X'는 '에 의해 주문없이

우리는 (내림차순하지만 가끔, 주로 순서 (기본값) 오름차순 결과를 얻고있다 매우 무작위). 같은 SQL 쿼리가 순서없이 여러 번 실행하면 다른 순서로 결과 집합을 반환 할 수 있습니까? 우리는 SQL Server 2000을 5 개월 전에 사용 했었지만이 문제에 결코 직면하지 않았습니다. SQL Server 2008은 'order by'없이 SQL 쿼리를 다르게 처리합니까?

감사합니다.

+0

모두에게 감사 : 나는 통조림 대답을 썼다. 권장대로 주문을 구현할 것입니다.이 문제가 너무 오랫동안 발생하지 않았다는 사실을 알기가 혼란 스러웠다가 갑자기 여러 가지 사례가 짧은 시간 내에 발생하는 것을 보았습니다. – spie

답변

3

x의 다양한 값에 대해 이런 현상이 발생 했습니까?

OMG Ponies says 귀하가 지정하지 않으면 주문이 보장되지 않습니다.

bid_id = x 기준과 일치하는 행의 상당 부분이 response_id 인 것으로 간주 될 때 클러스터 된 인덱스 스캔을 얻는 것일 수 있습니다. 그러나 비 클러스터링을 통해 찾고 있습니다. 적은 수의 레코드가 조건과 일치 할 것으로 예상 할 때 bid_id 열의 클러스터 된 인덱스 이러한 서로 다른 액세스 전략은 서로 다른 주문으로 반환 될 수 있습니다. ORDER BY을 추가하면 결과를 리턴하기 전에 정렬을 계속하는 전략을 선호하게되거나 계획에 추가 정렬 단계를 추가합니다.

+0

마틴, 해설을 감사드립니다. 감사. – spie

9

모든 SQL 문에서 모든 데이터베이스에서 순서가 일치하도록 ORDER BY 절을 정의해야합니다.

+0

OMG에게 감사드립니다! 정식 주목. – spie

+0

+1 정확히 - ORDER BY 절이 보장 주문이 없음을 의미합니다. –

2

주문이 중요한 경우 항상 ORDER BY를 사용하십시오.

디스크에있는 것과 반대로 메모리에 캐시 된 것은 SQL Server 엔진이 행을 가져 오는 순서에 영향을 미치므로 ORDER BY를 사용하지 않으면 행의 순서에 영향을줍니다.

다음 URL은 캐시 주제에 대해 직접적으로 관련되지는 않지만 흥미로운 내용을 담고 있습니다.

http://blog.sqlauthority.com/2010/06/17/sql-server-data-pages-in-buffer-pool-data-stored-in-memory-cache/

+0

Darryl, 참으로 도움이되는 링크입니다. 감사! – spie