2010-07-08 80 views
1

我有一个由通常的电子商务相关表(Order,OrderItem,ShoppingCart,CreditCard,Payment,Customer,Address等等)组成的关系数据库支持的网站。实现更好的数据库性能

存储的过程。由于数据量+必须发生的众多联接,并且根据搜索参数有时会超时(尽管存在索引),但返回订单历史记录的速度非常缓慢。

数据库模式已经很好地规范化了,我相信我可以通过转向类似数据仓库的方式来实现更好的性能。 DW项目不是微不足道的,然后存在保持数据同步的问题,所以我想知道是否有人知道快捷方式。也许是一种即开即用的解决方案,它将创建DW模式并保持数据同步(可能通过触发器)。我听说过Lucene,但它似乎更关注文本搜索和文档管理。有没有人有其他建议?

+0

数据库?版? – 2010-07-08 20:58:54

+0

SQL Server 2008 – Keith 2010-07-08 21:36:45

回答

0

物化视图是您可能在Oracle中使用的。他们为您提供了“保持数据同步”功能以及快速访问聚合数据的功能。由于您没有提及您的平台的任何细节(平台,服务器规格,行数,点击数/秒等),所以我实际上帮不了那么多。

当然,我们假设您已经检查过您所有的SQL都已正确且最优地编写,您的索引是正确的,您在应用程序的所有级别都正确使用了缓存,并且您的数据库服务器已足够RAM,快速硬盘等等。

另外,你有没有考虑非规范化你的模式,只是为了更快地提供你最常见的查询?这比完成整个数据仓库要好得多,这可能不是你想要的。通常,数据仓库仅用于报告目的,而不是用于提供交互式应用程序。

+0

谢谢彼得。查询已分析并添加了适当的索引。不幸的是我不能改变模式,这就是为什么我对“复制”到一些非规范化的只读结构感兴趣。 – Keith 2010-07-08 21:39:01

+0

SQL Server 2008支持物化视图。他们可能值得研究,假设添加它们并不算“改变模式”。他们是我能想到的对复制数据库的“快捷方式”最接近的事情。 – 2010-07-09 02:30:18

+0

我创建了一个索引视图(WITH SCHEMABINDING)a.k.a.“物化视图”,它非常有帮助。我也调整了SP,因此需要更少的连接。 – Keith 2010-07-14 16:33:30

1

你的数据库有多大?

没有任何捷径,但三维建模并不难。你首先确定一个粮食,然后需要确定你的事实和与事实相关的维度。然后,将尺寸分成几个表格,这些表格可以让尺寸只随着时间的推移缓慢增长。维度的选择是完全实用的并且基于数据行为。

我建议你看看Kimball的书。

对于数GB的数据库,每天从头开始更新报表数据库(无需历史记录,仅从3NF为相同数据的不同模型重新填充)肯定是可能的。有一些实时数据仓库技术只是在一天中持续应用更改。

因此,虽然DW项目可能不是微不足道的,但非规范化技术非常易于使用且不必构建完整的时间不变数据仓库。