小编Bri*_*ohl的帖子

SQL Server nvarchar(max) 与 nvarchar(n) 影响性能

这是 SQL Server 2008 R2 SP2。我有2张桌子。两者都是相同的(数据和索引),除了第一个表有一个 VALUE 列 asnvarchar(max)和第二个有相同的列 as nvarchar(800)。此列包含在非聚集索引中。我还在两个表上创建了聚集索引。我还重建了索引。此列中的最大字符串长度为 650。

如果我对两个nvarchar(800)表运行相同的查询,则始终会更快,速度是原来的两倍。当然,这似乎违背了“varchar”的目的。表包含 800,000+ 行。查询应该查看大约 110,000 行(这是计划估计的)。

根据 io 统计数据,没有 lob 读取,所以一切似乎都在行中。执行计划是相同的,除了两个表之间的成本百分比略有不同,并且估计的行大小更大nvarchar(max)(91 字节 vs 63 字节)。读取次数也几乎相同。

为什么会有差异?

====== 架构 ======

 CREATE TABLE [dbo].[table1](
        [ID] [bigint] IDENTITY(1,1) NOT NULL,
        [ProductID] [bigint] NOT NULL,
        [ProductSkeletonID] [bigint] NOT NULL,
        [Value] [nvarchar](max) NOT NULL,
        [IsKeywordSearchable] [bit] NULL,
        [ValueInteger] [bigint] NULL,
        [ValueDecimal] [decimal](18, 2) NULL,
        [ValueDate] [datetime] NULL,
        [TypeOfData] [nvarchar](20) NOT NULL,
     CONSTRAINT [PK_table1] PRIMARY KEY CLUSTERED 
    ( …
Run Code Online (Sandbox Code Playgroud)

sql-server sql-server-2008-r2

16
推荐指数
1
解决办法
2万
查看次数

标签 统计

sql-server ×1

sql-server-2008-r2 ×1