내가 테이블SQL 쿼리를 작성하는 방식이 성능에 영향을 줍니까?
Id int
Region int
Name nvarchar
select * from table1 where region = 1 and name = 'test'
select * from table1 where name = 'test' and region = 1
성능에 차이가있을 것이다이 있다고? 인덱스가없는 것으로 가정합니다.
LINQ와 동일합니까?
내가 테이블SQL 쿼리를 작성하는 방식이 성능에 영향을 줍니까?
Id int
Region int
Name nvarchar
select * from table1 where region = 1 and name = 'test'
select * from table1 where name = 'test' and region = 1
성능에 차이가있을 것이다이 있다고? 인덱스가없는 것으로 가정합니다.
LINQ와 동일합니까?
귀하의 한정어는 본질적으로 실제로 동일합니다 (Where 절의 순서는 중요하지 않음). 그렇다면 아무런 차이가 없습니다.
LINQ의 경우 LINQ to SQL에서 실제로 발생하는 쿼리 (SQL 프로파일 러를 사용하여 찾을 수 있음)를 알아야합니다. 가끔은 쿼리가 가장 단순한 쿼리가 될 수 있습니다. FK 또는 기타 제약 조건에 대한 의존성과 같은 이유로 인해 쿼리를 실현하지 못하는 경우가 있습니다. LINQ는 select에도 *를 사용하지 않습니다.
유일한 실제 방법은 두 쿼리의 SQL Server 쿼리 실행 계획을 확인하는 것입니다. 주제에 대한 자세한 내용을 읽으려면 여기 : 엔진이 쿼리를 실행하기 전에 테이블 방식을 찾아야한다 때문에 나는의 *를하지 않는 것이 좋습니다
해야할까요? 아닙니다. SQL은 관계형 대수이며 DBMS는 명령문 내에서의 순서와 관계없이 최적화해야합니다.
혹시. 일부 DBMS '는 말한대로 데이터를 특정 순서 (예 : 일종의 키 유지)로 저장할 수 있습니다. 그러나 여기에 핵심이 있습니다. 당신은 그것에 의존 할 수 없습니다.
향후 어느 시점에서 DBMS '를 전환해야 할 수도 있습니다. 같은 버전의 DBMS도 동작을 변경할 수 있습니다. 당신이 의지해야 할 유일한 것은 SQL 표준에있는 것입니다.
주어진 쿼리에 대해 : 문제의 두 필드에 인덱스 또는 기본 키가없는 경우 두 경우 모두 전체 테이블 검색이 필요하다고 가정해야합니다. 그러므로 그들은 같은 속도로 달려야합니다.
. 대신 불필요한 오버 헤드를 피하기 위해 원하는 테이블 필드를 사용하십시오.
네, 엔진이 쿼리를 최적화하지만 도움이됩니다. :).
최고 감사합니다.
간단한 쿼리의 경우에는 거의 차이가 없지만 실제로 쿼리를 작성하는 방식은 성능에 큰 영향을 줄 수 있습니다.
SQL Server에서 성능 문제는 매우 데이터베이스와 관련이 있습니다. 상관 관계가있는 하위 쿼리는 일반적으로 파생 테이블에 대한 조인에서 동일한 작업을 수행하는 것과 비교할 때 성능이 떨어집니다.
쿼리에 SARGable을 사용하는 경우가 있습니다. SARGable이 아닌 절, 필요한 필드 만 선택 *을 사용하지 않는 경우 (특히 하나 이상의 조인으로 사용하지 않는 경우) 필드가 반복됨), 커서 대신 집합 기반 쿼리를 사용하여 와일드 카드를 aa와 같은 절의 첫 번째 문자로 사용하는 것을 피하십시오. 보다 효율적인 방법으로 장을 작성하는 매우 큰 책이 있습니다.
"SARGable"은 모르는 사람들을 위해 DB2 용어 (및 기타 DBMS ')에서 1 단계 술어입니다. 1 단계 술어는 인덱스의 일부이므로 DB2가 먼저 사용합니다.