列存储索引和nvarchar(max)

时间:2019-06-21 12:45:40

标签: sql json sql-server sql-server-2017 columnstore

我计划将JSON文档存储在SQL Server 2017中群集列存储索引表的nvarchar(max)列中。

我是否有来自供应商(Microsoft)的一些相互矛盾的信息,不管这是一个好主意:

https://docs.microsoft.com/en-us/sql/relational-databases/indexes/columnstore-indexes-design-guidance?view=sql-server-2017

在以下情况下不使用群集的列存储索引:

  • 该表需要varchar(max)nvarchar(max)varbinary(max)数据类型。或者,设计columnstore索引,使其不包括这些列。

虽然其他几篇MS博客文章都标出了相反的说法: https://blogs.msdn.microsoft.com/sqlserverstorageengine/2017/02/09/json-data-in-clustered-column-store-indexes/

后面的文章中甚至有很好的测试,但是第一个“不要使用...”没有任何东西可以备份该语句。

有人有经验会出什么问题吗?还是有人在生产中数百万行使用了这种功能?

1 个答案:

答案 0 :(得分:1)

列存储索引的限制和限制
不能在非聚集列存储索引中包含 nvarchar(max)varchar(max)varbinary(max) 类型的大对象 (LOB) 列。只有聚集列存储索引支持 LOB 类型,从 SQL Server 2017 (14.x) 版本开始,并且 Azure SQL 数据库配置在高级层、标准层(S3 及更高版本)和所有 VCore 产品层。请注意,以前的版本不支持聚集和非聚集列存储索引中的 LOB 类型。

souce