SQL Server 2005表有多少列太多了?

Aar*_*her 9 sql-server sql-server-2005

我有一个请求允许动态表有1000列(由我的最终用户随机选择).这对我来说似乎是一个坏主意.它是一个可自定义的表,因此它将具有列varchar(200)float列的混合(float最适合应用程序c ++ double类型).此数据库主要是遗留应用程序的索引,并充当报告存储库.这不是记录系统.该应用程序有数千个数据点,其中很少有可以标准化.

关于它的性能影响的任何想法?还是一个理想的表格大小来分解它呢?

由于我不知道20k值的选择中的哪些字段,最终用户将选择规范化表是不可行的.我可以将这些数据分成几个表,我必须动态管理(可以添加或下载字段.然后删除行,并重新解析记录系统以填充表.)我的偏好是推回和规范化所有20k位数据.但我没有看到这种情况发生.

Chr*_*ava 15

这对我来说闻起来很糟糕.

需要考虑的事项:

这些列中的大多数都包含NULL值吗?

许多人会被命名为Property001,Property002,Property003等......?

如果是这样,我建议您重新考虑数据规范化.


dev*_*vio 14

来自SQL2005文档:

SQL Server 2005每个数据库最多可包含20亿个表,每个表最多可包含1,024个列.(...)每行的最大字节数为8,060.对于具有varchar,nvarchar,varbinary或sql_variant列的表,放宽了此限制,这些列导致总定义的表宽度超过8,060字节.这些列中每一列的长度仍必须在8,000字节的限制范围内,但它们的组合宽度可能超过表中的8,060字节限制.

这些列的功能是什么?为什么不把它们分成主表,属性(查找表)和值?


Kar*_*arl 9

每当您觉得需要询问系统有什么限制时,您就会遇到设计问题.

如果你问"我可以在varchar中放入多少个字符?" 那么你根本不应该使用varchars.

如果您真的想知道1000列是否合适,那么您迫切需要重新组织数据.(正常化)

  • 只要系统具有理智的限制,那就没问题.获取D0S中的最大文件名长度.8个字符非常低,但我们不得不处理很长时间.另外,640 K的记忆物.或SQL Server 7连续2 K的数据. (3认同)

Sco*_*vey 6

MS SQL Server每个表的限制为1024列,因此您将在此边缘运行.使用varchar(200)列,您将能够超过每行8k字节的限制,因为SQL将在数据页上存储8k,然后溢出页面外的数据.

SQL 2008为这样的场景添加了稀疏列 - 在这些场中你有很多带有空值的列.

使用稀疏列 http://msdn.microsoft.com/en-us/library/cc280604.aspx