使用过滤器查询大表与数据库中的小表进行查询-任何性能提升?

时间:2019-06-18 14:06:45

标签: sql database

我有一张拥有1000万条记录的大桌子,并且用于我们现有的应用程序之一。我们正在开发一个新应用程序,该应用程序仅需要过滤具有7000条记录的大表的结果集。

我的问题是,具有7000条记录的较小表与具有过滤条件的查询大表相比是否会获得任何性能提升(它将与架构中的其他几个表完全独立于现有应用程序而加入)?还是应该避免冗余地将所有数据保存在一个表中?这是数据仓库中的设计。请提出建议!

谢谢!

1 个答案:

答案 0 :(得分:0)

对于几乎所有数据库,使用示例表都将明显更快。这是因为读取记录将需要加载较少的数据页。

此外,如果要更新基本表,则“快照”与主表上发生的页,表和行锁是隔离的。从性能的角度来看,这是很好的,但是这意味着版本可能会不同步,这可能是不好的。

而且,从查询的角度来看,样本的统计信息将更加准确。这有助于优化器选择最佳的查询计划。

我可以想到两种情况下性能可能不会显着提高的情况。第一种是您的数据库是否支持聚集索引,并且所需的行是由一系列索引键(或单个键)定义的。这些将是“相邻的”,因此聚集索引将扫描大约相同数量的页面。实际索引结构的开销很小。

类似地,如果您的记录如此之大,以至于每个数据页上只有一条记录,那么使用第二张表的好处就会更少。这样可以消除索引访问的开销,但不会减少读取次数。

所有这些注意事项都没有说明您是否应该使用单独的表。您应该在您的环境中进行测试。管理一个单独的表的开销(在性能和应用程序复杂性方面都存在创建和删除该表的开销)可能会抵消较小的性能提升。