【发布时间】:2016-04-20 13:47:48
【问题描述】:
我的简洁代码在下面给出了一个选择查询:
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) 字段中的数据,它会非常快地返回数据。
【问题讨论】:
-
nvarchar(max)字段中有多少数据?未对nvarchar(max)字段执行索引,因此这可能是原因之一。此外,最大字段与非最大字段的存储方式不同。 -
每个 nvarchar(max) 列中有 200KB 或更多
-
没有 WHERE 子句,所以索引在这里帮不上忙
-
啊,所以你想为每条记录从数据库中提取 600+Kb 吗? 20 行使得每个查询至少几乎是 6Mb。在 SQL Server Management Studio 中运行它时,它实际上并没有返回完整的列,它只返回前 X 个字符。
-
加上用户说的,最多可以显示65535个字符(在
Options -> Query Results -> Results to Grid可调),也就是65k。
标签: c# sql-server ssms dapper nvarchar