2009-06-05 5 views

답변

-1

내가 수행하고있는 Tsql 쿼리에는 집합 기반 연산이 없습니다 ... 모든 데이터 형식의 15 개 열로 163336 개의 레코드 집합을 제공 한 서버에서 선택 쿼리를 실행하여 시간 차이를 확인하는 것만으로도 궁금합니다. 시간이 표시된 ssms의 하단에있는 상태 표시 줄에 시간을 기록했습니다.

동일한 쿼리를 SqlDataReader에서도 실행했습니다. 그리고 두 가지 형태의 쿼리 리더에서 동일한 선택 쿼리를 여러 번 실행했습니다 (대/소문자와 공백이 모두 같음).

15-28 초까지 변화 SqlDataReader 개체 걸리는 시간 위치를 29 ~ 31 초에서 달라진다 SSMS에서 쿼리 ...

번갈아 내가 동시에 그들을 실행되지 않았습니다 그러나

하지만, 여러으로 times ... 그래서 네트워크 대역폭이나 메모리 또는 CPU 사용량이 datareader로 실행 된 tsql이 ssms에서 실행 된 것보다 더 나은 성능을 제공한다고 생각하지 않습니다.

+0

입니다. 이것은 일반적으로 아무것도 증명하지 못합니다. 왜 당신은 집합 기반 연산을 사용하지 않는가? setbased soluton으로 대체 된 커서는 훨씬 빠릅니다. – HLGEM

+0

나중에 이것을 보려는 사람에게 아무런 도움이되지 않는 경우 왜 이것을 (자신의 질문에 대한) 대답으로 받아 들여야합니까? Marc은 아주 좋은 대답을 가지고 있습니다. 나는 쿼리 성능에 큰 영향을주는'SET' 옵션의 차이를 겪었으며, 결과적으로 내 애플리케이션에서 쿼리를 실행하고 SSMS에서 쿼리를 실행하는 것과 큰 차이가있었습니다. –

1

결과를 SSMS에 표시하는 데 걸리는 시간과 관련이있을 수 있습니까? 아마도 결과 집합의 크기와 관련이 있습니다.

결과가 얼마나 큽니까?

4

하나의 가능성은 연결 상태가 다릅니다 - 특히 SET 옵션 등 - 명백한 것 (통계, 프로파일 링 등)뿐만 아니라 ANSI_NULLS와 같은 것조차도 일부 쿼리에 큰 영향을 줄 수 있습니다 (특히 xml 열 또는 peristed 계산 된 열).

또한 읽을 때 데이터로 무엇을하고 있습니까? 그것을 표시하고 있습니까? 그것을 보관하고 있습니까? 그냥 떨어 뜨리는거야? SSMS는 표 형식의 메커니즘으로 표를 표시하여 표식에 표시해야합니다. 표준 표기법 (표 레이아웃과 이미 일치)으로 파싱하는 경우 - 또는 처리되지 않은 행을 삭제하면 작업량이 적습니다. 할 것. 내가 무엇을 기억에서

, 또한 일괄 화면을 업데이트 - 제안 여기에 변수 ... 많은 일 일부 스레딩이 ...

1

일부의 생각 :

알 수있는 유일한 방법 정확히 SQL 프로필러를 사용하여 기간 등을 트래핑하는 것입니다. SSMS는 결과 집합을 가져 와서 표시해야합니다. 또는 SQL 데이터 판독기 결과로 무엇을하고 있습니까? 아니면

또는이 모든 것이 PC에 있습니까? 아니면 서버에서 SqlDataReader를 실행하고 있습니까?

또는 SSMS를 통해 먼저 쿼리를 실행하여 계획이 캐시되고 메모리에 데이터가 컴파일됩니까?