Azure SQL 데이터베이스를 사용할 때 EntityFramework에 의해 생성 된 매개 변수화 된 쿼리를 사용할 때 성능 차이를 알게되었습니다.Azure SQL의 매개 변수화 된 쿼리 성능 저하 NVARCHAR (4000)
기본 키가있는 테이블이 있는데 기본 키를 사용하여 해당 테이블에서 값을 가져 오려고하면 EntityFramework는 NVARCHAR (4000)을 데이터 형식으로 사용하여 매개 변수화 된 쿼리를 만듭니다.
DECLARE @p__linq__0 nvarchar(4000)
SET @p__linq__0 ='ehenurqp0kpql76kjsw3'
select * from mediacontentreferences where [email protected]__linq__0
이렇게하면 Azure SQL 데이터베이스에서 매우 이상한 실행 계획이 생성됩니다. 그것은 전체 테이블을 통해 보이는 인덱스 스캔을 사용하기 때문에
그것은 매우 비효율적이다.
올바른 데이터 형식의 매개 변수를 사용하는 경우 실행 계획은 기본 키 인덱스를 사용합니다.
내가 온 - 프레미스 SQL 서버의 첫 번째 쿼리를 사용하는 경우
DECLARE @p__linq__1 varchar(30)
SET @p__linq__1 ='ehenurqp0kpql76kjsw3'
select * from mediacontentreferences where [email protected]__linq__1
은, 실행 계획은 VARCHAR (30)에 NVARCHAR (4000) 변환 및 기본 키 인덱스를 사용합니다.

이는 푸른 SQL 서버의 실행 계획 계산의 결함 것 같습니다.
Entity Framework에서 쿼리를 만드는 방식이 바뀔 수 있습니까?
몇 가지 기사를 읽었지만 해결 방법은 없습니다. 생성 쿼리는 올바른 데이터 유형 매개 변수를 선언합니다 동안
Why does code first/EF use 'nvarchar(4000)' for strings in the raw SQL command?
Why does Entity Framework generate large parameters? How can they be reduced?
사내 구축 형 시스템의 SQL Server 버전은 무엇입니까? –
열에 대해 hasmaxlength 설정을 사용 하시겠습니까? https://prashantbrall.wordpress.com/2011/04/ –
온 - 프레미스, 2008 R2와 2014를 모두 테스트했으며, 둘 다 작동합니다. – Dan