EDM 엔터티를 데이터베이스 (SQL Server 2005) 뷰에 매핑했습니다. 기업은 다음과 같이 정의되어있다 뷰에 해당하는 ID, 이름 및 DateInserted의 속성을 가진 간단한 영화 엔티티입니다 :Entity Framework 생성 된 뷰에 매핑 된 엔터티 용 SQL
SELECT iMovieID, vchName, dbo.t_Movie 함께 FROM dtInsertDate
(NOLOCK)
테이블 t_Movie은 다음과 같은 정의가 있습니다.
는 TABLE [DBO]를 CREATE [t_Movie (
[iMovieID [INT] IDENTITY (1,1)
[vchName] VARCHAR NULL NOT,
[dtInsertDate [날짜] NULL,
CONSTRAINT [PK_t_Movie] PRIMARY KEY 클러스터링
( [iMovieID] ASC
) WITH (NULL NOT PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF,
ALLOW_ROW_LOCKS = ON, ON [PRIMARY]
) ON ALLOW_PAGE_LOCKS = ON) PRIMARY]
GO
I 엔티티에 간단한 Linq에 쓰기 질문 같은 : 여기
var q = from m in context.v_Movie where m.vchName.Contains("Ocean") select m;
foreach (var movie in q)
{
Console.WriteLine("{0}:{1}",movie.iMovieID, movie.vchName);
}
는 프로파일에 의해 캡처 엔티티 프레임 워크에 의해 생성 된 SQL은이다.
가
[Extent1]에서 [iMovieID] AS [iMovieID,
[Extent1] . vchName] AS [vchName,
는 [Extent1]. dtInsertDate] FROM
[dtInsertDate 바와 같이 (
[v_Movie]를 선택. iMovieID] iMovieID,
가 [v_Movie]. VCH AS 이름] AS [vchName,
[v_Movie]. dtInsertDate] AS [dtInsertDate [DBO] FROM
. v_Movie] AS [v_Movie]) Extent1]
WHERE (CAST (CHARINDEX (AS N'Ocean '[Extent1] vchName]) INT AS))> 0
DBA는 내부 SELECT 우려가 있습니다..
가
[v_Movie] iMovieID 바와 같이 선택 [ iMovieID],
[v_Movie]. [vchName] AS [vchName],
,451,515,[v_Movie]. [dtInsertDate] AS [dtInsertDate] [DBO] FROM
는. v_Movie] AS [v_Movie]) [Extent1]
은 시간이 지남에 몇 가지 심각한 성능 문제가 발생할 것입니다 AS 테이블은 모든 선택하기 때문에 성장에 따라 보기에서 임시 테이블 ([Extent1])로 행을 선택한 다음 외부 SELECT가이 임시 테이블에서 선택합니다.
EF이 작업을 수행 할 필요가 왜 어떤 특별한 이유는 생성 된 SQL 수 없었다 다음 어떤 이유가있다 :.
이
[v_Movie] 선택 [iMovieID] AS [iMovieID ]
[v_Movie]. vchName] AS [vchName,
[v_Movie]. dtInsertDate [DBO] FROM
[dtInsertDate] AS. v_Movie] v_Movie]
WHERE (CAST AS (CHARINDEX (N'Ocean ', [Extent1]. [vchName]) AS int))> 0
다음 SQL을 사용하여 100,000 개의 레코드로 테이블을 채웠지 만 LINQ 쿼리를 실행할 때 성능 저하를 알지 못했습니다.
가 @counter가
,
가 세트 @counter = 0
동안 < 100000
@counter
세트 @counter = @counter + 1 시작 값 int
선언을 BEGIN : 프로파일 조회가 제하에 실행되었습니다
INSERT INTO t_Movie (vchName) 값 ('영화'의 + CONVERT (VARCHAR @ 카운터))
단부
END
이것은 유효한 문제입니까?
PS -
엔티티 내가 사용했던 쿼리에 (CAST INT AS (CHARINDEX (N'Ocean '[Extent1] [vchName])).) 는 LINQ 이후 여기에 문제가되지 않습니다 단지 삽화를위한 것입니다.
모든 통찰력은 많은 XML 편집기를 사용하여 .EDMX 파일에