20 개 행 (대부분의 열이 nvarchar (max) 인)이 15 초 이상 소요되는 간단하고 깔끔한 선택 쿼리

c# dapper nvarchar sql-server ssms

문제

위의 코드는 select 쿼리로 아래와 같이 표시됩니다.

const string Sql = @"SELECT  [id]
                              ,[groupName]
                              ,[reqCap]
                              ,[impCap]
                              ,[player]
                              ,[resumeDate]
                              ,[whitelist]
                              ,[blacklist]
                              ,[Macros]
                              FROM [VideoServer].[dbo].[TagGroup]";
return await dc.Connection.QueryAsync<TagGroup>(Sql);

내 테이블 디자인은 다음과 같습니다.

[id] [int] IDENTITY(1,1) NOT NULL,
[groupName] [varchar](500) NOT NULL,
[reqCap] [int] NULL CONSTRAINT [DF_TagGroup_reqCap]  DEFAULT ((0)),
[impCap] [int] NULL CONSTRAINT [DF_TagGroup_impCap]  DEFAULT ((0)),
[player] [varchar](500) NULL,
[resumeDate] [date] NULL,
[whitelist] [nvarchar](max) NULL,
[blacklist] [nvarchar](max) NULL,
[Macros] [nvarchar](max) NULL

SQL Server Management Studio에서이 선택 쿼리를 실행하면 0 밀리 초 내에 반환됩니다. 그러나 dapper (위 코드)의 동일한 쿼리가 너무 오래 걸립니다.

어떤 아이디어? 이것은 nvarchar(max) 입니까?

nvarchar(max) 필드의 데이터를 지우면 데이터가 매우 빨리 반환됩니다.

수락 된 답변

모든 기록에 대해 데이터베이스에서 600+ Kb를 끌어 오려고합니다. 20 개의 행은 쿼리 당 최소 6Mb 만듭니다.

SQL Server Management Studio에서 빠르게 실행되는 이유는 실제로 전체 열을 반환하지 않기 때문에 첫 번째 X 문자 만 반환하므로 모든 6MB가 처리되는 것은 아닙니다. 코드 (이 경우에는 dapper)를 통해 실행하면 모든 6MB가 반환됩니다.

파일을 데이터베이스에 저장하는 경우 파일을 저장하지 않고 파일 시스템에 저장하고 데이터베이스를 사용하여 파일의 위치 및 메타 데이터를 저장해야합니다.


인기 답변

나는 데이터베이스에 JSON / XML을 저장하는 것을 반대하지 않지만 때로는 반환하기 위해 매우 큰 데이터 덩어리를 제공합니다. 반환하는 데 시간이 오래 걸리며 일반적으로 전체 정보를 반환하지 않는 SSMS보다 더 많이 사용합니다. .

하지만이 많은 데이터를 반환 할 때는 필터링하는 것이 중요합니다. 나는 당신의 응용 프로그램이 정말로 노력하고있는 것을 위해 모든 분야 또는 모든 기록을 필요로하는지 의심 스럽다. 쿼리에서 실제로 필요한 것만 필터링하면 더 빠른 결과를 얻을 수 있습니다.



아래 라이선스: CC-BY-SA with attribution
와 제휴하지 않음 Stack Overflow
이 KB는 합법적입니까? 예, 이유를 알아보십시오.
아래 라이선스: CC-BY-SA with attribution
와 제휴하지 않음 Stack Overflow
이 KB는 합법적입니까? 예, 이유를 알아보십시오.