성능 혜택 SQL 쿼리가 제한 될 때와 전체 행을 호출 할 때?

StackOverflow https://stackoverflow.com/questions/430605

  •  08-07-2019
  •  | 
  •  

문제

전체 행을 쿼리하는 대신 쿼리에서 필요한 필드 만 선택하면 성능 이점이 얼마나됩니까? 예를 들어, 10 개의 필드가 있지만 디스플레이에 5 개의 필드 만 필요하면 5 개만 쿼리 할 가치가 있습니까? 이 제한의 성능 이점은 무엇입니까? 나중에 필요한 경우 SQL 쿼리에 돌아가서 필드를 추가해야 할 위험은 무엇입니까?

도움이 되었습니까?

해결책

고려해야 할 추가 데이터 측면만이 아닙니다. 클러스터 된 인덱스 (또는 테이블)에 대한 책갈피 조회가 필요하기 때문에 모든 열을 선택하면 커버링 인덱스의 유용성이 무효화됩니다.

다른 팁

선택한 행 수와 추가 필드가 소비하는 메모리의 양에 따라 다릅니다. 예를 들어 여러 텍스트/블로브 필드가 존재하거나 많은 행을 선택하면 훨씬 느리게 실행될 수 있습니다.

나중에 필드를 추가하는 것은 어떻게 위험입니까? 변화하는 요구 사항에 맞게 쿼리를 수정하는 것은 개발 프로세스의 자연스러운 부분입니다.

Select 문에서 열의 열을 명시 적으로 명명하는 것에 대해 알고있는 유일한 이점은 코드가 사용되는 열에 이름이 변경되면 Code 이전에 SELECT 문이 실패한다는 것입니다. 선택 문이 Proc, Proc 및 DB 스크립트가 컴파일되지 않는 경우 더 좋습니다. VS DB Edition과 같은 도구를 사용하여 DB 스크립트를 컴파일/확인하는 경우 매우 편리합니다. 그렇지 않으면 성능 차이는 무시할 수 있습니다.

검색된 필드의 수는 SQL 요청 자체의 큰 오버 헤드에 비해 성능에 대한 2 차 효과입니다. 프로세스를 벗어나 네트워크를 가로 질러 다른 호스트로, 해당 호스트의 디스크에 디스크가 추가 바이트의 데이터는 거의 없습니다.

분명히 추가 필드에 메가 바이트 블로브가 포함 된 경우 방정식이 왜곡됩니다. 그러나 내 경험은 트랜잭션 오버 헤드가 실제 데이터와 동일한 순서 또는 더 크다는 것입니다. 나는 몇 년 전부터 "빈"NOP TNS 요청이 와이어의 약 100 바이트 인 것보다 모호하게 기억합니다.

SQL Server가 쿼리중인 동일한 시스템이 아닌 경우 추가 열을 선택하면 네트워크를 통해 더 많은 데이터를 전송합니다 (병목 현상이 될 수 있음). 디스크에서 더 많은 데이터를 읽어야한다는 것을 잊지 않고 더 이상 할당됩니다. 결과를 유지하는 메모리.

그 자체로 문제를 일으킬 수있는 것은 하나도 없지만 물건을 추가하면 모두 함께 성능 문제를 일으 킵니다. 쿼리 나 데이터가 많을 때 약간의 도움이됩니다.

위험은 나중에 쿼리에 필드를 추가해야한다는 것입니다. 이는 코드 변경을 의미 할 수 있지만 일반적으로 추가 필드를 처리하기 위해 더 많은 코드를 추가해야합니다.

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