为什么 Redshift 总是进行 seq 扫描,即使使用排序键也是如此?

Abr*_*ith 6 performance amazon-redshift

我的场景似乎非常简单,但由于某种原因,我的查询总是进行 seq 扫描,并且不使用为表定义的排序键。

SELECT *
FROM table1
WHERE md_event_time between '2017-07-23 00:00:00' AND '2017-07-27 23:59:00'
Run Code Online (Sandbox Code Playgroud)

where 子句中的字段显示为表 info 中的排序键。解释:

XN Seq Scan on table1 (cost=0.00..0.00 rows=1 width=20) 
Filter: ((md_event_time <= '2017-07-27 23:59:00'::timestamp without time zone) AND 
(md_event_time >= '2017-07-23 00:00:00'::timestamp without time zone))
Run Code Online (Sandbox Code Playgroud)

任何帮助表示赞赏。

Joe*_*ris 5

你在计划中看不到排序键的效果EXPLAIN。运行查询,然后在视图中查找它,特别是在显示表扫描的行上SVL_QUERY_SUMMARY查找is_rrscan等于的列。t这表明 Redshift 能够通过使用排序键范围来减少扫描。

rows_pre_filter如果和计数之间存在很大差异rows,请确保表已被VACUUM编辑(以删除已删除的行),然后考虑仅通过将其设置为ENCODE raw(排序键上的压缩过多会迫使数据库实现太多行)。

http://docs.aws.amazon.com/redshift/latest/dg/r_SVL_QUERY_SUMMARY.html