几个表的常见连接

时间:2012-05-31 20:42:49

标签: sql oracle sql-server-2008-r2

我们有几个表,我们的大多数查询只使用几个连接,换句话说,我们有几乎每个查询都使用的2-3个连接。如果表格越来越大,如何加速这种常见联接的最常见方法是什么?我们想使用SQL Server或Oracle。

3 个答案:

答案 0 :(得分:2)

  1. 物化视图 - oracle支持这些视图,在某些情况下它们很有用,尤其是当有许多读取而不是写入时: http://docs.oracle.com/cd/B10501_01/server.920/a96520/mv.htm

  2. 指标 - 分析/解释查询计划,看看添加索引是否有帮助。通常,您可以通过为不同查询提供不同的指示来提高速度。您还可以提供提示,以告知查询解析器用于特定查询的索引。

  3. 非规范化 - 将这些表中的一些数据存储在相关表中,而不是必须加入才能获得它。

  4. 缓存 - 增加查询缓存的大小,或在应用中创建缓存层。

答案 1 :(得分:1)

一些选项

  • 在您加入的te列上放置索引
  • 制作索引,使他们覆盖
  • 您之后的数据
  • 对您的数据进行非正常化,不需要连接< =最大胜利
  • 在SQL Server中使用索引视图或在Oracle中使用实例化视图
  • 确保为查询优化器提供可获得的最佳统计信息,以便它使用最佳连接策略(哈希/合并/循环)

答案 2 :(得分:1)

最常见的方法是建立索引,但是您没有提供足够的信息来更具体。

以下是一些情景:

(1)您有一堆连接到中央表的引用表,例如事实表。

在这种情况下,您需要在引用表上定义自动增量主键。它自动作为索引。

(2)您的查询具有高度选择性

在这种情况下,您希望将索引集中在where子句中的字段上。当第二个表非常小时,尤其如此,因此顺序搜索类似于索引搜索。

(3)你加入的桌子确实是一个性能瓶颈

在这种情况下,您可能希望将连接的结果实例化为表或实例化视图。当您的连接标准很复杂时,可能需要这样做,例如在连接标准中使用数据范围。

(4)您还有其他选项,例如分区数据。