我在SQL Server 2008中有一个支持各种应用程序的数据库。我现在开始开发一个新的应用程序,从那个数据库,我需要适合一个表的数据(虽然有一些复制)。
我想要的数据可以被提取到具有6列的视图(几个内连接)。我正在开发一个必须非常快速浏览数据的Web应用程序(大约600万条记录)。因此,我想知道是否建议查询SQL Server视图或部署由Lucene或类似机制索引的新的可更新数据库(BerkeleyDB?)
提前感谢!
答案 0 :(得分:2)
视图不会更快地访问您的数据,它们只会使编写查询更容易。这意味着从视图中选择数据将等同于执行构成视图的少数连接,并且涉及600万条记录的表上的连接将需要一段时间。
问题是,你想加快什么?如果要从复杂数据集中快速选择,可以尝试构建包含所需数据的实际表(而不是视图),并以预设的时间间隔从主表中更新这些表。
如果您的数据将不断修改并且您需要快速更新并且选择始终反映最新数据,您可能希望优化表结构。看看你是否可以取消连接。这可能以复制数据为代价,这意味着您需要大量使用交易。
答案 1 :(得分:0)
如果您想保留当前的基础架构,希望将数据限制在单个表中并关注性能。我强烈建议您在表中添加其他列,并在这些列中存储非规范化数据。
例如:
假设你有一张桌子,people
。每个人都有一个manager_id
,可以链接到与person
相同的表格中的另一个manager
。您可以为名为manager
的{{1}}添加一个列,该列存储了一个计数器,该计数器跟踪了employees_count
下的人数。
这是一个简单但有效的非规范化数据示例
答案 2 :(得分:0)
如果不了解确切的数据结构,这可能是一个难以回答的问题。 SQL Server中的Indexed views适用于此,可以很好地满足您的性能标准。
此时建议对视图运行测试(可能是JMeter jdbc负载测试)。在使用Lucene或BerkeleyDB创建其他索引的路径之前,您可以相对轻松地确定最简单解决方案的可行性。