【问题标题】:How to optimize multiple join on如何优化多重连接
【发布时间】:2019-07-30 07:54:01
【问题描述】:

如何优化类似的查询

select a.*,b.* from a join b
on a.foo = b.foo
and a.bar = b.bar
and a.bazz = b.bazz
-- ...(many and omitted here)

是否需要在这些列上添加索引,以便它们在加入时运行得更快?

【问题讨论】:

  • 索引的基本原则是让索引中的所有列在Join条件、where子句和order by子句中使用。
  • 我建议在表 A 上创建一个 unique_ID VARBINARY 列(使用 a.foo、a.bar、a.bazz 的组合来导出 ID)和 B 并将其用于加入

标签: sql greenplum


【解决方案1】:

不,您不需要在像 Greenplum 这样的 MPP 数据库中使用索引。连接非常大的表时,您可能希望使两个表之间的分布键相同。

但请确保表之间的数据类型相同。

Greenplum 通常不使用索引。您也不需要唯一索引或主键。

【讨论】:

    【解决方案2】:

    尚不清楚索引是否有帮助。 Greenplum 是一个分布式数据库,其中数据是分区的。

    因此,最大的影响可能是某些或所有索引键是否是表的分区键。

    如果您确实添加了一个索引,那么您将希望对 所有 列进行比较的一个索引。类似于b(foo, bar, bazz),而不是每列一个索引。

    【讨论】:

      猜你喜欢
      • 2012-11-03
      • 2018-10-30
      • 2011-01-06
      • 1970-01-01
      • 2021-08-18
      • 2020-04-30
      • 1970-01-01
      • 1970-01-01
      • 2020-01-02
      相关资源
      最近更新 更多