【问题标题】:Full table scan despite LIMIT clause尽管有 LIMIT 子句,但仍进行全表扫描
【发布时间】:2022-01-23 03:01:54
【问题描述】:

我在 Amazon Redshift 中运行这个简单的查询 SELECT * FROM my_view LIMIT 10 时遇到问题。 像这样定义的视图

CREATE VIEW my_view AS
SELECT * FROM my_spectrum_table
UNION ALL
SELECT * FROM ordinary_table
UNION ALL
SELECT * FROM some_materialized_view;

问题是查询尝试扫描底层 my_spectrum_table 中的数 TB 数据,并最终死于磁盘已满错误。使用 WHERE 子句查询过滤数据时效果很好。

【问题讨论】:

    标签: sql amazon-web-services amazon-redshift


    【解决方案1】:

    LIMIT 减少了结果数据的大小。如果满足结果数据大小,它可能会导致查询中的步骤被中止,但如果查询中有足够的步骤,这只能在扫描所有输入数据之后发生。 LIMIT 通常用于减少发送回请求者的数据量。

    WHERE 子句减少了使用的源数据,如果块元数据和/或频谱分区允许 CAN 也减少扫描的数量。如果你想减少扫描,WHERE 是要走的路。

    【讨论】:

      【解决方案2】:

      view 就是这样工作的:每次使用它时都会重新计算。如果您只想要 10 条记录,请创建一个反映它的查询,并使用该查询。

      另一种选择是创建一个materialized view,但你应该不时刷新它(否则你会得到陈旧的数据)。

      【讨论】:

        猜你喜欢
        • 2013-01-07
        • 2013-10-09
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-02-10
        • 2018-12-09
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多