> 데이터 베이스 > MySQL 튜토리얼 > 내 SQL 쿼리가 SSMS보다 C#에서 3분 더 느린 이유는 무엇입니까?

내 SQL 쿼리가 SSMS보다 C#에서 3분 더 느린 이유는 무엇입니까?

Mary-Kate Olsen
풀어 주다: 2024-12-31 07:43:10
원래의
856명이 탐색했습니다.

Why is My SQL Query 3 Minutes Slower in C# Than in SSMS?

코드와 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.

추가 권장사항

  • 명시적 매개변수 길이 사용: 캐시 오염을 방지하기 위해 개발자는 Option을 사용할 때 VARCHAR 매개변수의 길이를 명시적으로 지정하는 것이 좋습니다. 1.
  • 참고 추천 글: 개발자는 "애플리케이션에서는 느리고 SSMS에서는 빠르다? "글을 참고해 보시기 바랍니다. 코드와 SSMS 간의 성능 불일치에 대한 자세한 내용은 성능 미스터리 이해'를 참조하세요.

위 내용은 내 SQL 쿼리가 SSMS보다 C#에서 3분 더 느린 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿