2

我的意思是这里的 SQL 可以是任何类似 SQL 的数据库,例如 SQL server、My SQL、SQLite,甚至是 MS Access。我想知道表格的大小取决于什么,它取决于具有固定设计结构的表格中的实际行,或者还取决于表格中单元格的内容。例如:

我有一个具有固定设计结构的表,如下所示:

create table SampleTable (
   ID int primary key,
   Message varchar(500)
)

这是有 1 行的表格:

ID    |     Message
1           I love .NET     --11 characters for Message

这也是一个有 1 行的表:

ID    |     Message
1           I also love Java     --16 characters for Message

如果大小取决于行数,则上面的 2 个表格将具有相同的大小,如果它还取决于单元格的内容,则第二个表格将具有更大的大小。我想知道哪个更大?我关心这一点,因为在某些情况下,我真的想最大化一个字段的最大字符数(SQL 服务器中为 8000),以使用户无需输入几乎任何他/她想要的东西,但我害怕我的数据库文件太大(不必要的、昂贵的)。

您的帮助将不胜感激!

4

4 回答 4

3

varchar(或 nvarchar)字段仅使用所需的空间。

因此,更少量的数据占用更少的空间。固定长度等效项(char、nchar)使用全长。

varchar 字段的存储大小是输入数据的实际长度 + 2 个字节 http://msdn.microsoft.com/en-us/library/ms176089.aspx

于 2013-05-03T15:47:00.497 回答
3

粗略地说,一张桌子的大小取决于

  • 固定宽度列的大小(整数、浮点数、char(n) 等),加上
  • 可变宽度列(varchar(n)、clob 等)中的数据大小,加上
  • 索引的大小,加上
  • 索引开销,加上
  • 表开销,加上
  • 行开销,加上
  • 列开销,减去
  • 压缩和其他我现在想不到的内部优化。

开销会让你大吃一惊。

分区和其他结构优化会影响table的含义。

于 2013-05-03T16:39:54.747 回答
2

SQL - 意思是 ISO SQL 标准 - 实际上没有指定数据应该如何存储。不同的 DBMS 都有自己的内部存储机制,并且可以有很大的不同。

索引、压缩和分区只是确定使用多少存储的一些因素。您需要参考您正在使用的特定产品的文档,而不是寻找任何一般性的答案。

于 2013-05-03T15:55:01.047 回答
2

通常来说,一般来说。至少对于 SQL Server,有很多因素需要考虑:

  • 存储在每列上的数据类型(例如,varchar,int,bigint,datetime)每个都使用一定量的空间
  • 表上的索引
  • 表上的索引类型
  • ......还有更多

在网上查阅有关数据类型的书籍,以及每一种需要多少存储空间来保存它。

例如,请参阅如何计算MS SQL Server 中聚集索引的估计大小。

对于非聚集索引也是如此。

于 2013-05-03T15:55:31.877 回答