해당 데이터베이스 컬럼에 해당하는 크기의 매개 변수를 생성하는 엔티티 프레임 워크 4.0을 강제하는 방법 : 나는 EF를 사용하여 쿼리를 실행 해요다음과 같이 구성되어 나는 아주 간단한 테이블 <code>Member</code>라는이
CREATE TABLE [dbo].[Member](
[Member_MemberId] [int] IDENTITY(1000,1) NOT NULL,
[Member_ExternalId] [varchar](32) NULL,
[Member_ConsumerId] [varchar](32) NULL,
CONSTRAINT [PK_Member] PRIMARY KEY NONCLUSTERED
(
[Member_MemberId] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]
을 데이터 컨텍스트에서 4.0는 다음과 같이
exec sp_executesql N'SELECT TOP (2)
[Extent1].[Member_MemberId] AS [Member_MemberId],
[Extent1].[Member_ExternalId] AS [Member_ExternalId],
[Extent1].[Member_ConsumerId] AS [Member_ConsumerId]
FROM [dbo].[Member] AS [Extent1]
WHERE [Extent1].[Member_ExternalId] = @p__linq__0',N'@p__linq__0 varchar(8000)',@p__linq__0='Paul'
:
return Members.SingleOrDefault(member => member.ExternalId == externalId);
생성 된 SQL은 다음과 같습니다
성능 POV에서 열 자체가 varchar(32)
으로 제한 될 때 Member_ExternalId 열을 varchar(8000)
으로 자동 캐스팅하는 경우이 쿼리는 차선입니다. EF가 해당 행과 동일한 크기의 on-the-fly 매개 변수를 생성하도록 강제 할 수 있습니까?
매개 변수를 varchar (8000)로 형 변환하는 것이 차선책입니까? – codeulike
나는 분명히해야한다; 우리의 거주 DBA는 메모리 할당 측면에서 차선책이라고 주장합니다. 그는 더 이상 세부 사항에 들어 가지 않았다. 당신 의견은 뭐니? –
그는 이론상으로 맞을지 모르지만 요즘에는 8k가 그다지 많지 않으므로 아마도 다시 할당되지 않을 것입니다. SQL 문에 varchar (8000) 및 varchar (32)를 사용하여 두 가지 변형을 수백 번 실행하고 성능 차이가 있는지 확인합니다. – codeulike