SQL表的大小取决于什么?

时间:2013-05-03 15:41:14

标签: sql sql-server database database-design

我的意思是这里的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 个答案:

答案 0 :(得分:3)

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

因为这样少量的数据占用的空间更少。固定长度等价物(char,nchar)使用全长。

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

答案 1 :(得分:3)

粗略地说,表的大小取决于

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

开销会给你带来惊喜。

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

答案 2 :(得分:2)

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

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

答案 3 :(得分:2)

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

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

在线检查有关data types的书籍,以及每个书籍保存所需的存储量。

例如,请参阅MS SQL Server中的calculate the estimated size of a clustered index

non clustered index相同。