2009-10-01 42 views
0

我在SQL Server 2008中有一个支持各种应用程序的数据库。我现在开始开发一个新的应用程序,并从该数据库开始,我需要适合一个表的数据(虽然有一些复制)。真正快速的单表数据库的策略是什么?

我想要的数据可能会被提取到6列的视图(一些内部联接)。我正在开发一个Web应用程序,它必须能够快速浏览数据(大约600万条记录)。因此,我想知道是否建议查询SQL Server视图或部署由Lucene或类似机制索引的新的可更新数据库(BerkeleyDB?)

先谢谢了!

回答

2

意见不作任何访问您的数据更快的有效的例子,他们只是使编写查询更容易。这意味着从您的视图中选择数据将等同于组成视图的少数联接,并且在涉及600万条记录的表上联接将需要一段时间。

问题是,你想加快什么?如果您希望从复杂数据集中快速选择,可以尝试构建包含所需数据的实际表(而不是视图),并按预设间隔从主表中更新这些表。

如果您的数据将不断修改,并且您需要快速更新,并且选择始终反映最新数据,则可能需要优化表结构。看看你是否可以取消连接。这可能是以复制数据为代价的,这意味着您需要大量使用事务。

+0

呃...数据每月更新...我只需要做出选择... 所以你认为我应该创建一组新的表(2或3)与所需的数据并更新它们主数据库何时更新? – 2009-10-01 10:32:13

+1

一般正确,但请参阅leonm对索引voews的评论 – Mark 2009-10-01 10:53:04

+0

@Pedrolopes,挥霍并做5或6!从你的问题到底有多少人能推荐你应该有多少桌?你给零的细节 – 2009-10-01 12:19:52

0

您是否熟悉Boyce-Codd Normal Forms

如果您想保留您当前的基础架构,想将您的数据限制在单个表中并关注性能。我强烈建议你在表中添加额外的列,并在这些列中存储非标准化的数据。

例如:

假设您有一个表,people。每个人有一个manager_id链接到manager在同一个表中的另一个person。您可以为名为employees_countmanager添加一列,其中存储了一个跟踪该人数的人数的计数器manager

这是一个简单的,但非规格化数据

0

这可能是一个难以回答的问题,不知道确切的数据结构。 SQL Server中的Indexed views对此很有帮助,并且可以很好地满足您的性能标准。

此时建议针对视图运行测试(可能是JMeter jdbc负载测试)。使用Lucene或BerkeleyDB创建附加索引之前,您可以通过相对较少的努力确定最简单解决方案的可行性。

+0

这是一个过度标准化的数据结构...它有6个表,所以即使是最小的操作,我需要进行2或3个连接...并且它有大约3000万条目,我只想要一个子集(约600万)那些...... 因此,创建一个新的表格并测试其性能? SQL Server分析服务给了我一些很好的结果... – 2009-10-01 10:34:44

+0

我最初会使用新的表/视图,如果真的有必要,只能切换到另一种方法。进行大量测试以查看性能是否满足您的需求,但听起来如果您没有问题。 保留一个额外的Lucene索引有它自己的一套问题。您可以保留的东西越简单,就越有可能正确缩放。 – leonm 2009-10-01 10:44:52

+0

Pedrolopes几乎没有超标准化的结构。我经常不得不用更多的连接来查询更大的表,并且仍然获得良好的性能。如果您已正确编制索引,并且有600万条记录是SQL Server的一个小数据集,那么加入两个或三个表格就没有任何内在的错误。您应该使用标准查询轻松获得良好的性能。视图可能会损害性能,尤其是在视图之上堆叠视图时。索引视图可以提供帮助,但您只能索引不引用其他视图的视图。在你走下这条道路之前,请长时间思考! – HLGEM 2009-10-01 14:38:14