gpt4 book ai didi

amazon-web-services - AWS Redshift 查询计划警告

转载 作者:行者123 更新时间:2023-12-01 10:27:55 25 4
gpt4 key购买 nike

我是 RedShift 的新手,现阶段只是在尝试帮助进行表格设计。

我们有一个非常简单的表,大约有 600 万行和 2 个整数字段。

两个整数字段都在排序键中,但计划有一个警告 - “非常有选择性的查询过滤器”。

STL_Alert_Event_Log 条目是:'非常有选择性的查询过滤器:ratio=rows(61)/rows_pre_user_filter(524170)=0.000116'

我们正在运行的查询是:

select count(*) 
from LargeNumberofRowswithUniKey r
where r.benchmarkid = 291891 and universeid = 300901

我们的表 DDL 是:

CREATE TABLE public.LargeNumberofRowswithUniKey
(
benchmarkid INTEGER NOT NULL DISTKEY,
UniverseID INTEGER NOT NULL
)
SORTKEY
(
benchmarkid,UniverseID
);

我们还在 table 上运行了以下命令:

Vacuum full public.LargeNumberofRowswithUniKey;
Analyze public.LargeNumberofRowswithUniKey;

计划截图在这里:[查询计划图片][1]我的期望是,包括 Benchmark 和 Universe 在内的多重排序键以及两者都是过滤谓词的一部分这一事实将确保设计对于示例查询是最优的。情况似乎并非如此,因此所附图像中的红色警告符号。有人能解释一下吗?

谢谢

乔治

2017 年 9 月 7 日更新我有更多信息可能会有所帮助:

如果我运行一个更简单的查询,它只过滤排序键的第一列。

select r.benchmarkid 
from LargeNumberofRowswithUniKey r
where r.benchmarkid = 291891

这会导致根据来自控制台的实际查询计划扫描 524,170 行。当我使用 STV_BLOCKLIST 查看 block 时。满足我的查询可能需要的相关 block 是:

|slice|col|tbl   |blocknum|num_values|minvalue|maxvalue|
| 1| 0|346457| 4| 262085| 291881| 383881|
| 3| 0|346457| 4| 262085| 291883| 344174|
| 0| 0|346457| 5| 262085| 291891| 344122|

那么不应该扫描 786,255 行 (3 x 262,085) 而不是计划中列出的 524,170 (2 x 262,085) 行吗?

最佳答案

the rows selected vs rows scanned ratio is less than 0.05 时返回“非常有选择性的过滤器”警告即,与实际返回的行数相比,扫描的行数相对较多。这可能是由于表中有大量未排序的行,这可以通过运行 Vacuum 来解决。但是,正如您已经这样做了,我认为这正在发生,因为您的查询实际上是非常有选择性的(您正在选择 benchmarkid 和 Universeid 的单个组合),因此您可能会忽略此警告。

关于amazon-web-services - AWS Redshift 查询计划警告,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46056876/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com