1

当我在列中使用 SQL ServerTextVarchar(max)数据类型时,它会创建太大的数据库:例如,一个表中的 1000 行包含varchar(max)使用大约 1000 Mb (1Gb) !!!!

这正常吗?

感谢帮助

编辑我的文本字段大约 5 到 50 kb MAX

4

3 回答 3

1

it depends on what's inside your table. If you have 1000 rows with 1mb of data, you will have 1000 Mb

Try running:

select datalength(yourField) from yourTable

the datalength function will give you how many bytes are occupied by the column

于 2012-03-23T13:32:58.563 回答
0

运行 sys.sp_spaceused @objname = N'YourTable'; 查看您的桌子使用的空间。

如果没有未使用的空间,那么您的数据确实占用了该空间

如果有很多未使用的空间,您可以尝试创建一个新文件组并将 text/varchar(max) 列移动到这个新文件组,并缩小数据库DBCC SHRINKDB

之后,您的主文件组将占用更少的空间,并且您可以DBCC SHRINKFILE在出现问题时使用 缩小“有问题的”文件。

可以从 SSMS,在数据库属性,文件页面中创建一个新的文件组。您可以从那里生成 sql 脚本以查看发生了什么。

可以使用 TEXTIMAGE_ON { filegroup| 将文本列移动到不同的文件组。创建表中的“默认”}

对不起:不可能改变表,没有单独的列到不同的文件组,但是一次所有的“大”列。因此,您必须手动完成或在新的数据库图表(在 SSMS 工作室中)中显示您的表格并更改属性......对不起,我不知道它的名称,例如“文本/图像文件组”(我想,我有西班牙语 SSMS),但是当您在数据库图表设计器中看到表属性时,它就在那里。

优点:主表上的碎片更少,表/聚集索引 sacan 更快,并且可以只缩小您感兴趣的文件:带有有问题的“大”列。

于 2012-03-23T11:15:58.193 回答
0

varchar(max) 与 varchr(n) 不同;

一个 varchar(max) 单元格可以包含 2 GB 数据。

但对于 varchar(n):n 的最大数量为 8000,表示最大 8 KByte 数据。

but, any way, I don't know what kind of data you stored in your database.

so,in short, possibly normal.

于 2012-03-23T11:48:06.593 回答