2009-04-20 3 views

답변

7

귀하의 한정어는 본질적으로 실제로 동일합니다 (Where 절의 순서는 중요하지 않음). 그렇다면 아무런 차이가 없습니다.

LINQ의 경우 LINQ to SQL에서 실제로 발생하는 쿼리 (SQL 프로파일 러를 사용하여 찾을 수 있음)를 알아야합니다. 가끔은 쿼리가 가장 단순한 쿼리가 될 수 있습니다. FK 또는 기타 제약 조건에 대한 의존성과 같은 이유로 인해 쿼리를 실현하지 못하는 경우가 있습니다. LINQ는 select에도 *를 사용하지 않습니다.

유일한 실제 방법은 두 쿼리의 SQL Server 쿼리 실행 계획을 확인하는 것입니다. 주제에 대한 자세한 내용을 읽으려면 여기 : 엔진이 쿼리를 실행하기 전에 테이블 방식을 찾아야한다 때문에 나는의 *를하지 않는 것이 좋습니다

SQL Server Query Execution Plan Analysis

3

해야할까요? 아닙니다. SQL은 관계형 대수이며 DBMS는 명령문 내에서의 순서와 관계없이 최적화해야합니다.

혹시. 일부 DBMS '는 말한대로 데이터를 특정 순서 (예 : 일종의 키 유지)로 저장할 수 있습니다. 그러나 여기에 핵심이 있습니다. 당신은 그것에 의존 할 수 없습니다.

향후 어느 시점에서 DBMS '를 전환해야 할 수도 있습니다. 같은 버전의 DBMS도 동작을 변경할 수 있습니다. 당신이 의지해야 할 유일한 것은 SQL 표준에있는 것입니다.

주어진 쿼리에 대해 : 문제의 두 필드에 인덱스 또는 기본 키가없는 경우 두 경우 모두 전체 테이블 검색이 필요하다고 가정해야합니다. 그러므로 그들은 같은 속도로 달려야합니다.

1

. 대신 불필요한 오버 헤드를 피하기 위해 원하는 테이블 필드를 사용하십시오.

네, 엔진이 쿼리를 최적화하지만 도움이됩니다. :).

최고 감사합니다.

1

간단한 쿼리의 경우에는 거의 차이가 없지만 실제로 쿼리를 작성하는 방식은 성능에 큰 영향을 줄 수 있습니다.

SQL Server에서 성능 문제는 매우 데이터베이스와 관련이 있습니다. 상관 관계가있는 하위 쿼리는 일반적으로 파생 테이블에 대한 조인에서 동일한 작업을 수행하는 것과 비교할 때 성능이 떨어집니다.

쿼리에 SARGable을 사용하는 경우가 있습니다. SARGable이 아닌 절, 필요한 필드 만 선택 *을 사용하지 않는 경우 (특히 하나 이상의 조인으로 사용하지 않는 경우) 필드가 반복됨), 커서 대신 집합 기반 쿼리를 사용하여 와일드 카드를 aa와 같은 절의 첫 번째 문자로 사용하는 것을 피하십시오. 보다 효율적인 방법으로 장을 작성하는 매우 큰 책이 있습니다.

"SARGable"은 모르는 사람들을 위해 DB2 용어 (및 기타 DBMS ')에서 1 단계 술어입니다. 1 단계 술어는 인덱스의 일부이므로 DB2가 먼저 사용합니다.

관련 문제