Sql 我可以将聚集列存储索引放在具有NVARCHAR(MAX)字段的表上吗?
我在SQL Server 2016中有一个包含200 GB数据的表。因此,我计划在该表中应用群集ColumnStore,以实现磁盘压缩和更好的性能 但问题是在该表下有一列的数据类型是NVARCHAR(MAX),而columnstore索引不支持该数据类型 所以我想的是将数据类型从NVARCHAR(max)更改为在同一列中至少接受81446个字符的任何其他数据类型 我尝试过SQL中可用的一些其他数据类型,比如VARCHAR(8000),但它所做的是删除8000个字符之后的其他数据 我也试过发短信。但同样在文本中,由于限制,columnstore不适用Sql 我可以将聚集列存储索引放在具有NVARCHAR(MAX)字段的表上吗?,sql,sql-server,sql-server-2016,Sql,Sql Server,Sql Server 2016,我在SQL Server 2016中有一个包含200 GB数据的表。因此,我计划在该表中应用群集ColumnStore,以实现磁盘压缩和更好的性能 但问题是在该表下有一列的数据类型是NVARCHAR(MAX),而columnstore索引不支持该数据类型 所以我想的是将数据类型从NVARCHAR(max)更改为在同一列中至少接受81446个字符的任何其他数据类型 我尝试过SQL中可用的一些其他数据类型,比如VARCHAR(8000),但它所做的是删除8000个字符之后的其他数据 我也试过发短信。
所以你能告诉我我必须使用什么样的数据类型吗。或者有没有其他方法可以在同一个表中应用ColumnStore索引?这里有几个不同的问题: Q:SQL Server 2016能否在columnstore索引中使用(最大)数据类型? 编号: 当表需要时,不要使用聚集列存储索引 varchar(max)、nvarchar(max)或varbinary(max)数据类型 我通常就到此为止-如果文档告诉您不要做某事,您可能不应该这样做 Q:我可以在VARCHAR(8000)中存储超过8000个字符吗? 不。数字的意思是它所说的-它是您可以存储的最大字符数。如果您试图存储额外的数据,它将无法生存 Q:我可以构建一个没有这些(最大)字段的集群columnstore吗? 是的,通过更改数据模型和分解表。假设所涉及的表格称为FactTable:
现在您开始了解为什么文档建议您这样做不是一个好主意。使用LOB列减小表大小的另一种解决方案是在存储和读取LOB内容时使用SQL Server的本机COMPRESS()和DECOMPRESS()函数。 这里有一个链接到 当我发现存储在varchar(max)列中的30MB json文件根本没有被任何表压缩方法压缩时,我开始使用COMPRESS()和DECOMPRESS()。COMPRESS()使它们缩小到原来尺寸的5%以下。 压缩varchar(max)、nvarchar(max)和varbinary(max)格式效果很好 DECOMPRESS()将返回一个二进制文件,因此如果需要,请确保将其转换或强制转换为原始格式(varchar或nvarchar) 我不能说太多关于表现的处罚。有一些,但性能仍然是伟大的,我需要做的
COMPRESS()使用Gzip压缩标准。支持Gzip的ETL工具可以将已经压缩的内容写入SQL Server,以便稍后使用DECOMPRESS()读取。至少C#/.NET/SSIS可以。我在stackoverflow上发现了一个错误。您使用的是什么DBMS?什么版本?SQL Server 2016企业版Microsoft SQL Server 2016企业版对此有何更新?我喜欢您将文本字段拆分为另一个表的想法!干杯尽管OP提到了SQL Server 2016,但我想向其他访问者指出(这是谷歌的热门作品),SQL Server 2017支持nvarchar(max)+