如何测试Redshift Views的性能?

问题描述 投票:2回答:1

我有一个关于在redshift中测试视图的查询性能的问题。

我有两个表:table_a和table_b: - 表a和表b定义了不同的排序键。 - 表a有6个字段用于排序键。 - 表b有4个用于排序键的字段。 - 两个表共享一些列名/类型,但表a是表b的超集。

我创建了一个视图v_combined。该视图根据查询的日期组合来自表a和表b的数据。例如,如果在日期XYZ之前进行查询,则视图将获取表a。否则它来源表b。

create view as v_combined
select a as x, b as y, c as z, to_timestamp(time_field::TEXT, 'YYYYMMDD'):timestamp as date
from table_a
where date < "MY_DATE"

union all

select * from table_b
where date > "MY_DATE"

我对视图和相应的表进行了比较:

  1. select count(*) from v_combined where date < "MY_DATE"
  2. select count(*) from table_a where date < "MY_DATE"
  3. select count(*) from v_combined where date > "MY_DATE"
  4. select count(*) from table_b where date > "MY_DATE"
  5. select * from v_combined where date < "MY_DATE" limit 10000
  6. select * from table_a where date < "MY_DATE" limit 10000
  7. select * from v_combined where date > "MY_DATE" limit 10000
  8. select * from table_b where date > "MY_DATE" limit 10000

(1)和(2)具有与预期相似的执行时间。

(3)和(4)具有与预期相似的执行时间。

(5)似乎比(6)具有更长的执行时间。

(7)似乎比(8)具有更长的执行时间。

在redshift中测试视图性能的最佳方法是什么?

sql amazon-redshift query-performance sql-view
1个回答
2
投票

我想说测试视图性能的最好方法是像你一样运行测试查询!

这个特定视图的表现总是很差,因为它正在做一个UNION ALL

在(5)中,它需要在应用LIMIT之前从两个表中获取所有行,而(6)只需要访问table_a并且一旦达到限制就可以停止。

如果你需要这样的查询具有良好的性能,你可以考虑创建一个组合表(而不是视图)。运行每日(或每小时?)脚本以从组合数据重新创建表。这样,查询运行得更快。

© www.soinside.com 2019 - 2024. All rights reserved.