2009-07-17 49 views
0

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

我使用的是SQL Server 2005中

我如何设计这个数据库?

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

+6

如果您需要可靠的建议,您应该添加更多关于数据的详细信息。 – CodeFusionMobile 2009-07-17 15:48:58

回答

0

好吧,考虑到您提供的所有描述,您确实可以确保数据正常化,并且您的19列不会导致“稀疏”表(这意味着大量的这些列是空的)。

如果你想添加更多的数据(你现有的模式和一些示例数据,也许),那么我可以提供更具体的建议。

0

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

大量的测试数据和执行计划(与查询分析器)在这里是你的朋友。

+1

我真的在等这个。我不是说,“不这样做”,但每天增加30K条记录意味着不需要的索引可能会对性能产生负面影响。所以你需要强调“你会被问到”。在你使用它一段时间之前,你并不知道这一点。 **个人资料**首先。 – 2009-07-17 16:09:37

0

除了对稀疏表格的评论之外,您应该在您希望查询的列索引表格。

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

0

一些优化技术,你可以做:基于最有可能的查找标准

  1. 集群您的数据(例如聚集每一行的创建日期,时间会让这种性质非常快速的查找窗口的主键)。
  2. 假设一次只写入一行(不是批处理)并且每行都被插入但从未更新过,则可以编写所有选择语句以使用“with(NOLOCK)”选项。如果您完全绕过锁定系统,您将拥有多个阅读器,这将提供巨大的性能提升。考虑到表格的结构,读取无效数据的风险大大降低。

如果你能发布你的表格定义,我可能会提供更多的建议。

1

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

您还需要索引来查询最常查询的字段,但不要在此处跳过枪。您可以稍后添加索引。 简介首先让你知道你真正需要的索引。在包含大量插入的表格中,不需要的索引可能会损害您的性能。