当我在列中使用 SQL ServerText
或Varchar(max)
数据类型时,它会创建太大的数据库:例如,一个表中的 1000 行包含varchar(max)
使用大约 1000 Mb (1Gb) !!!!
这正常吗?
感谢帮助
编辑我的文本字段大约 5 到 50 kb MAX
当我在列中使用 SQL ServerText
或Varchar(max)
数据类型时,它会创建太大的数据库:例如,一个表中的 1000 行包含varchar(max)
使用大约 1000 Mb (1Gb) !!!!
这正常吗?
感谢帮助
编辑我的文本字段大约 5 到 50 kb MAX
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
运行 sys.sp_spaceused @objname = N'YourTable'; 查看您的桌子使用的空间。
如果没有未使用的空间,那么您的数据确实占用了该空间
如果有很多未使用的空间,您可以尝试创建一个新文件组并将 text/varchar(max) 列移动到这个新文件组,并缩小数据库DBCC SHRINKDB
之后,您的主文件组将占用更少的空间,并且您可以DBCC SHRINKFILE
在出现问题时使用 缩小“有问题的”文件。
可以从 SSMS,在数据库属性,文件页面中创建一个新的文件组。您可以从那里生成 sql 脚本以查看发生了什么。
可以使用 TEXTIMAGE_ON { filegroup| 将文本列移动到不同的文件组。创建表中的“默认”}
对不起:不可能改变表,没有单独的列到不同的文件组,但是一次所有的“大”列。因此,您必须手动完成或在新的数据库图表(在 SSMS 工作室中)中显示您的表格并更改属性......对不起,我不知道它的名称,例如“文本/图像文件组”(我想,我有西班牙语 SSMS),但是当您在数据库图表设计器中看到表属性时,它就在那里。
优点:主表上的碎片更少,表/聚集索引 sacan 更快,并且可以只缩小您感兴趣的文件:带有有问题的“大”列。
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.