2013-05-03 88 views
2

我的意思是这里的SQL可以是任何SQL,比如SQL服务器,My SQL,SQLite甚至MS Access等。我想知道表的大小取决于表的实际行数,具体取决于表中单元格的内容。例如:SQL表的大小取决于什么?

我有一个具有固定设计结构像这样的表:

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 

如果大小取决于行数,上面的两个表会有相同的大小,如果它还取决于单元格的内容,则第二个表格将具有较大的大小。我想知道哪个更大?我关心这个问题,因为在某些情况下,我真的希望最大限度地增加字段的最大数量(在SQL Server中为8000),以使用户免费输入他/她想要的任何东西,但是我害怕制作我的数据库文件太大(不必要,成本高昂)。

您的帮助将不胜感激!

+4

取决于实现。在SQL Server中,固定长度数据类型使用完整声明的数据类型。可变长度的只是内容的大小。除非在固定长度的长度存储为可变长度时使用压缩。也有一个稀疏的列格式,它又是不同的。但是,过度声明的列宽可能会影响内存分配。 – 2013-05-03 15:43:32

+1

如果要便宜可以防止您满足您的业务需求,这是一个坏主意, – 2013-05-03 15:44:26

+3

对于SQL Server,MSDN [解释](http://msdn.microsoft.com/zh-cn/library/ms175991.aspx)如何估计表和索引的表大小。相同的一般想法可能适用于其他平台。 – Pondlife 2013-05-03 15:45:21

回答

3

varchar(或nvarchar)字段只使用需要的空间。

由于如此小的数据量占用更少的空间。固定长度等价物(char,nchar)使用全长。

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

2

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

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

2

一般来说。至少对于SQL Server有办法许多因素要考虑:存储在每列

  • 数据类型(VARCHAR,你比如,INT,BIGINT,日期时间),每一个使用的空间量
  • 桌子上
  • 型指标的......以及一些更

检查联机丛书有关data types并为每一个需要多少存储需要保存它的索引。

请参阅示例如何在MS SQL Server中使用calculate the estimated size of a clustered index

non clustered index相同。

3

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

  • 固定宽度的列(整数,浮点数,字符(N)等)的大小,再加上
  • 数据的大小宽度可变的列(VARCHAR(n)的,CLOB等),加
  • 索引的大小,再加上
  • 索引的开销,加上
  • 表的开销,加上
  • 行overhea d,加
  • 列开销,减去
  • 压缩和其他内部优化,我现在无法想象。

开销可以让你感到惊讶。

分区和其他结构优化可以影响您的意思

相关问题