数据库性能和维护有一千列。

时间:2011-11-29 02:49:34

标签: sql-server sql-server-2005

我需要创建一个包含一千个字段(列)的表格,我不知道如何处理性能以及如何维护它请帮我提出建议。

3 个答案:

答案 0 :(得分:1)

如果大多数时候大多数值为NULL,那么您应该升级到SQL Server 2008并使用稀疏列,请参阅Using Sparse ColumnsUsing Column Sets

如果您的列值大多不是NULL,那么我会质疑数据模型的完整性。

答案 1 :(得分:0)

首先要做的事情

  1. 正常化
  2. 定义实体并分离到不同的表。绘制ER图和
    你会得到更多的想法。
  3. 如果列是varchar或text,则不要超过15列,因为
    然后SQL必须将数据存储在不同的页面中。如果列是
    布尔然后它可以在30左右。
  4. 根据您的数据正确定义聚簇索引,因为这将优化查询。
  5. 由于问题的性质没有太多细节,因此答案也是通用的,从100英尺的角度来看。

答案 2 :(得分:0)

同样,请不要这样做。

查看有关数据库的Entity Attribute Value模型。它将帮助您在实体上存储大量稀疏属性,并且不会使数据库失效。

基本概念如下所示

create table #attributes
(
    id int identity(1,1),
    attribute varchar(20),
    attribute_description varchar(max),
    attribute_type varchar(20)
)

insert into #attributes values ('Column 1','what you want to put in column 1 of 1000','string')
insert into #attributes values ('Column 2','what you want to put in column 2 of 1000','int')

create table #entity
(
    id int identity(1,1),
    whatever varchar(max)
)

insert into #entity values ('Entity1')
insert into #entity values ('Entity2')

create table #entity_attribute
(
    id int identity(1,1),
    entity_id int,
    attribute_id int,
    attribute_value varchar(max)
)


insert into #entity_attribute values (1,1,'e1value1')
insert into #entity_attribute values (1,2,'e1value2')
insert into #entity_attribute values (2,2,'e2value2')

select * 
from #entity e
join #entity_attribute ea on e.id = ea.entity_id

#entity表中的内容与#attribute表中的内容之间的区别在某种程度上取决于应用程序,但是一般规则是永远不会为null并且每次需要实体时都会访问,我会将此限制为10个左右的项目。

我猜这是一个医学应用程序?