코드와 SSMS 간의 쿼리 성능 불일치
개발자는 C# 코드와 SQL Server 관리에서 동일한 쿼리를 실행할 때 상당한 성능 차이를 경험했습니다. 스튜디오(SSMS). SSMS에서는 3초도 채 안 걸려 쿼리가 완료됐는데, 애플리케이션에서 실행하면 3분 넘게 걸렸다.
성능 문제의 근본 원인
추가로 살펴보면, 문제는 C# 코드와 SSMS에 사용된 쿼리 매개 변수 간의 미묘한 차이로 확인되었습니다. C# 코드에서는 클라이언트 ID에 대한 매개 변수가 NVARCHAR 유형으로 전달되었지만 SSMS 쿼리에서는 VARCHAR 유형으로 선언되었습니다.
데이터 유형 우선 순위 영향
데이터 유형 우선 순위 규칙으로 인해 C# 쿼리의 NVARCHAR 매개 변수로 인해 쿼리가 인덱스 탐색을 활용하지 못했습니다. 이로 인해 테이블 스캔이 발생하여 실행 시간이 크게 늘어납니다. 반면 SSMS 쿼리의 VARCHAR 매개변수를 사용하면 쿼리 최적화 프로그램에서 인덱스 탐색을 사용할 수 있어 실행 속도가 빨라졌습니다.
성능 문제 해결 방법
성능 불일치로 인해 개발자에게는 두 가지 옵션이 있었습니다.
옵션 1: 지정된 유형의 매개변수 사용
개발자는 유형을 허용하는 생성자를 사용하여 매개변수를 VARCHAR 유형으로 명시적으로 정의했습니다.
Parameters.Add("@clientID", SqlDbType.Varchar, 200)
이렇게 하면 매개변수가 올바른 유형으로 전달되며 SARG 기능을 방해하지 않습니다. query.
옵션 2: SQL 쿼리에서 매개 변수 캐스팅
또는 개발자는 다음과 같이 SQL 쿼리 내에서 매개 변수를 캐스팅할 수 있습니다.
where client_id = cast(@clientID as varchar(200))
이 방법은 유형 문제도 해결하고 쿼리가 인덱스를 활용할 수 있도록 합니다. Seek.
추가 권장사항
위 내용은 내 SQL 쿼리가 SSMS보다 C#에서 3분 더 느린 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!