내가 샘플 설명하려고 내 질문을 표시하려면 : 나는 LockStatus
을 선택합니다 이제엔티티 프레임 워크 성능
Id, UserName, Password, FName, LName, Gender, Birthday,
HomeTel, Mobile, Fax, Email, LockStatus
:
내가이 열이있는 테이블 UsersInfo
을 가지고 있다고 가정하자 이 테이블에서. 기존 모드에서 우리는이 쿼리를 만들어 실행을 위해 SqlCommand
로 보내 : 사용 엔티티 프레임 워크와
SELECT LockStatus FROM UsersInfo
를 그리고 오늘, 우리는 쿼리에서 이것을 사용
var q = from r in new Data_DBEntities().UsersInfo
select new
{
r.LockStatus
};
법인 SQL :
SELECT UsersInfo.LockStatus
FROM Data_DBEntities.UsersInfo
이제 응용 프로그램을 시작하고 SQL Server 프로파일 러를 사용하여이 응용 프로그램을 추적합니다. 나는이 결과를 참조 쿼리 (일반 모드)의 첫 번째 유형을 사용하는 경우 :
SELECT
[Extent1].[LockStatus] AS [LockStatus]
FROM (SELECT
[UsersInfo].[Id] AS [Id],
[UsersInfo].[UserName] AS [UserName],
[UsersInfo].[Password] AS [Password],
[UsersInfo].[FName] AS [FName],
[UsersInfo].[LName] AS [LName],
[UsersInfo].[Gender] AS [Gender],
[UsersInfo].[Birthday] AS [Birthday],
[UsersInfo].[HomeTel] AS [HomeTel],
[UsersInfo].[Mobile] AS [Mobile],
[UsersInfo].[Fax] AS [Fax],
[UsersInfo].[Email] AS [Email],
[UsersInfo].[LockStatus] AS [LockStatus]
FROM [dbo].[UsersInfo] AS [UsersInfo]) AS [Extent1]
:
SELECT LockStatus FROM UsersInfo
을 내가 사용하지만 엔티티 프레임 워크 (LINQ || 법인 SQL)을 SQL Server 프로파일 러는이 결과를 보여
백그라운드에서 EF가 모든 열을 선택하는 것을 볼 수 있습니다.
내 질문은 : 단지 하나의 열을 선택하고 싶지만 EF는 모든 열을 선택합니다. 내 테이블에 10 만 개의 레코드가 있다면 그 성능은 정말 좋지 않을 것입니다!
아마도 함수 또는 저장 프로 시저를 사용한다고 말할 수 있지만 다른 테이블에서 다른 열을 선택하려는 경우에는 좋지 않습니다.
당신은 어떻게 생각하십니까? 어떤 방법이 있습니까?
잘못된 것이 있습니다.EF는 모든 필드를 쿼리하여 객체를 생성합니다. 그러나 만약 당신이 질의에 유예를한다면, 그렇게하지 않을 것입니다. LINQ SQL 구문에 익숙하지 않아 기능적 구문을 선호하기 때문에 내 도움이 끝나는 곳입니다. 나는 확실히이 문제가 없다. – TomTom
쿼리가 무거워 보이지만 EF (지금은 v6)가 전통적인 ADO.NET만큼 빠르며 쿼리가 올바르게 작성된 경우 수백만 행의 테이블이 있습니다. ** 성능 **에 대해 걱정이된다면 성능 **에 대한 테스트를 실행 해 보았습니까? –