我们有几个表,我们的大多数查询只使用几个连接,所以换句话说,我们有几乎每个查询都使用的 2-3 个连接。如果表越来越大,如何加快这种常见连接的最常见方法是什么?我们想使用 SQL Server 或 Oracle。
问问题
54 次
3 回答
2
物化视图 - oracle 支持这些,它们在某些情况下很有用,尤其是。当有很多读取而不是写入时: http: //docs.oracle.com/cd/B10501_01/server.920/a96520/mv.htm
indicies - 分析/解释查询计划,看看添加索引是否有帮助。很多时候,您可以通过为不同的查询设置不同的索引来提高速度。您还可以提供提示来告诉查询解析器将哪个索引用于特定查询。
非规范化 - 将这些表中的一些数据存储在相关表中,而不必加入来获取它。
缓存 - 增加查询缓存的大小,或在应用程序中创建缓存层。
于 2012-05-31T20:52:16.523 回答
1
一些选项
- 在您加入的列上放置索引
- 制作索引,以便它们涵盖您所追求的数据
- 对您的数据进行非规范化,不需要连接 <= 最大的胜利
- 在 SQL Server 中使用索引视图或在 Oracle 中使用物化视图
- 确保为查询优化器提供它可以获得的最佳统计信息,以便它使用最佳连接策略(散列/合并/循环)
于 2012-05-31T20:47:23.273 回答
1
最常见的方法是索引,但您没有提供足够的信息来更具体。
以下是一些场景:
(1) 你有一堆连接到一个中心表的引用表,比如一个事实表。
在这种情况下,您希望在引用表上定义一个自动递增的主键。这会自动用作索引。
(2) 您的查询具有高度选择性
在这种情况下,您希望将索引集中在 where 子句中的字段上。当第二个表非常小时尤其如此,因此顺序搜索类似于索引搜索。
(3) 您的连接表确实是性能瓶颈
在这种情况下,您可能希望将连接的结果实例化为表或实例化视图。当您的连接标准很复杂时(例如在连接标准中使用数据范围),这可能是需要的。
(4) 您还有其他选择,例如对数据进行分区。
于 2012-05-31T20:51:00.523 回答