如何设计这个数据库?

时间:2009-07-17 15:44:48

标签: sql-server database-design

我必须设计一个数据库来存储日志数据,但我之前没有经验。我的表包含大约19列(每行大约500个字节),每天增长到30.000个新行。我的应用必须能够再次有效地查询此表。

我正在使用SQL Server 2005。

我该如何设计这个数据库?

编辑:我想要存储的数据包含很多类型:datetime,string,short和int。 NULL单元总数约为25%:)

5 个答案:

答案 0 :(得分:1)

然而,你会进行查找,日志表几乎肯定会有一个时间戳列。您需要首先在该时间戳上进行集群以保持插入效率。这也可能意味着始终将查询限制在特定的日期范围内,以便对聚簇索引的选择性很好。

您还需要最常查询的字段的索引,但不要在这里跳枪。您可以稍后添加索引。首先个人资料,以便了解您真正需要哪些索引。在包含大量插入的表上,不需要的索引会损害您的性能。

答案 1 :(得分:0)

嗯,鉴于您提供的描述,您所能做的就是确保您的数据正常化,并且您的19列不会引导您进入“稀疏”表(这意味着很多列都是空)。

如果您想添加更多数据(可能是您现有的架构和一些示例数据),那么我可以提供更具体的建议。

答案 2 :(得分:0)

在您要查询的每个列上抛出一个索引。

大量的测试数据和执行计划(使用查询分析器)都是您的朋友。

答案 3 :(得分:0)

除了对稀疏表的注释外,您还应该在要查询的列上对表进行索引。

或者,您可以使用分析器对其进行测试,并根据实际使用情况查看分析器在索引方面的建议。

答案 4 :(得分:0)

您可以进行一些优化:

  1. 根据最有可能的查找条件对数据进行聚类(例如,每行创建日期时间的群集主键将非常快速地查找此类性质。)
  2. 假设每次写入一行(不是批处理)并且每行都插入但从未更新过,您可以编写所有select语句以使用“with(NOLOCK)”选项。如果您有许多读者,因为您完全绕过锁定系统,这将提供巨大的性能提升。考虑到表的结构,大大降低了读取无效数据的风险。
  3. 如果您能够发布表格定义,我可能会提供更多建议。