Consulta de selección simple con 20 filas (la mayoría de las columnas son nvarchar (max)) que toma demasiado tiempo, 15 segundos y más

c# dapper nvarchar sql-server ssms

Pregunta

Mi código dapper se da a continuación con una consulta de selección:

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

El diseño de mi mesa se da a continuación:

[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

Cuando ejecuto esta consulta de selección en SQL Server Management Studio, vuelve en 0 milisegundos. Pero la misma consulta de dapper (código anterior) está tardando demasiado.

¿Algunas ideas? ¿Esto es debido a nvarchar(max) ?

Si borro datos en campos nvarchar(max) , devuelve datos muy rápido.

Respuesta aceptada

Está tratando de sacar 600 + Kb de la base de datos para cada registro. 20 filas hacen que casi 6Mb sean mínimos por consulta.

La razón por la que se ejecuta rápidamente en SQL Server Management Studio es que realmente no devuelve la columna completa, solo devuelve los primeros X caracteres, por lo que no se procesan los 6 + MB. Cuando está ejecutando código (dapper en este caso), se devuelven los 6 + MB.

Si está almacenando archivos en la base de datos, debe dejar de hacerlo y almacenarlos en el sistema de archivos, y usar la base de datos para almacenar las ubicaciones y los metadatos de los archivos.


Respuesta popular

Yo no soy anti almacenamiento de JSON / XML en la base de datos, pero da muy grandes bultos de datos para devolver veces que tendrá tiempo para volver - y más que en SSMS, que normalmente no devuelve la información completa que le .

PERO - cuando regresa esta cantidad de datos, es importante filtrar. Dudo que su aplicación realmente necesite todos los campos o todos los registros de lo que está tratando de hacer; Si filtra a lo que realmente necesita en su consulta, debe obtener un resultado más rápido.



Licencia bajo: CC-BY-SA with attribution
No afiliado con Stack Overflow
¿Es esto KB legal? Sí, aprende por qué
Licencia bajo: CC-BY-SA with attribution
No afiliado con Stack Overflow
¿Es esto KB legal? Sí, aprende por qué