Amazon web services 正在使用我的排序密钥吗?
我有一个表,其中有一列更新了,这是一个排序键。在表上运行VACUUM和ANALYZE之后,这是我在更新的\u上过滤时得到的查询计划: 我的理解是,尽管有sort键,查询执行引擎仍在对表进行顺序扫描,因此sort键没有做任何事情?顺序扫描在Amazon Redshift上是完全正常的,因为它不使用索引 系统足够聪明,可以跳过不包含所需值的块,因为每个只包含一列数据的块都存储块中每个值的最小值和最大值。因此,所有日期在2018-01-01之前的区块将自动跳过 这将不会出现在解释计划中,因为它取决于每个块中存储的实际数据 最好的办法是运行一些测试,看看它是否像您预期的那样运行得很快。您可能希望将启用\u结果\u缓存\u for \u会话设置为关闭,以停止缓存影响结果 另外,尽量避免将排序键强制转换为其他类型的情况。在上面的示例中,如果列是日期,但查询使用它作为时间戳,那么它可能无法跳过块,因为它必须在从磁盘读取该值后转换该值。因此,如果存在使用完全相同的数据类型的位置,它可能会工作得更好。连续扫描在Amazon Redshift上是完全正常的,因为它不使用索引 系统足够聪明,可以跳过不包含所需值的块,因为每个只包含一列数据的块都存储块中每个值的最小值和最大值。因此,所有日期在2018-01-01之前的区块将自动跳过 这将不会出现在解释计划中,因为它取决于每个块中存储的实际数据 最好的办法是运行一些测试,看看它是否像您预期的那样运行得很快。您可能希望将启用\u结果\u缓存\u for \u会话设置为关闭,以停止缓存影响结果 另外,尽量避免将排序键强制转换为其他类型的情况。在上面的示例中,如果列是日期,但查询使用它作为时间戳,那么它可能无法跳过块,因为它必须在从磁盘读取该值后转换该值。因此,如果WHERE使用完全相同的数据类型,它可能会工作得更好。请查看红移文档中的。它展示了如何使用SVL_QUERY_SUMMARY视图观察每个查询执行的极其详细的度量 对于最有效的排序键用法,您应该看到rr_扫描范围限制扫描列设置为t,num_rows_pre_过滤器应该非常接近行数。num_rows_pre_filter是应用谓词筛选器之前从磁盘扫描的行数。注意:根据您的具体数据,在这种情况下,相当接近会有所不同Amazon web services 正在使用我的排序密钥吗?,amazon-web-services,amazon-redshift,Amazon Web Services,Amazon Redshift,我有一个表,其中有一列更新了,这是一个排序键。在表上运行VACUUM和ANALYZE之后,这是我在更新的\u上过滤时得到的查询计划: 我的理解是,尽管有sort键,查询执行引擎仍在对表进行顺序扫描,因此sort键没有做任何事情?顺序扫描在Amazon Redshift上是完全正常的,因为它不使用索引 系统足够聪明,可以跳过不包含所需值的块,因为每个只包含一列数据的块都存储块中每个值的最小值和最大值。因此,所有日期在2018-01-01之前的区块将自动跳过 这将不会出现在解释计划中,因为它取决于每
SELECT stm,seg,step,TRIM(LEFT(label,30))"label"
,rows_pre_filter,rows,avgtime,bytes,is_rrscan
FROM svl_query_summary
WHERE query = 123456
ORDER BY stm ,seg ,step;
| stm | seg | step | label | rows_pre_filter | rows | avgtime | bytes | is_rrscan |
|-----|-----|------|-------------------------------|-----------------|------|---------|-------|-----------|
| 0 | 0 | 0 | scan tbl=428142 name=my_tbl | 103665 | 6 | 52814 | 1273 | t |
| 0 | 0 | 1 | project | 0 | 6 | 52814 | 0 | f |
| 0 | 0 | 2 | sort tbl=303 | 0 | 6 | 52814 | 1288 | f |
| 1 | 1 | 0 | scan tbl=303 name=Internal | 0 | 6 | 74 | 1288 | f |
| 1 | 1 | 1 | return | 0 | 6 | 74 | 0 | f |
| 1 | 2 | 0 | merge | 0 | 0 | 275 | 0 | f |
| 1 | 2 | 1 | project | 0 | 6 | 275 | 0 | f |
| 1 | 2 | 2 | return | 0 | 6 | 275 | 1387 | f |
请查看红移文档中的。它展示了如何使用SVL_QUERY_SUMMARY视图观察每个查询执行的极其详细的度量
对于最有效的排序键用法,您应该看到rr_扫描范围限制扫描列设置为t,num_rows_pre_过滤器应该非常接近行数。num_rows_pre_filter是应用谓词筛选器之前从磁盘扫描的行数。注意:根据您的具体数据,在这种情况下,相当接近会有所不同
SELECT stm,seg,step,TRIM(LEFT(label,30))"label"
,rows_pre_filter,rows,avgtime,bytes,is_rrscan
FROM svl_query_summary
WHERE query = 123456
ORDER BY stm ,seg ,step;
| stm | seg | step | label | rows_pre_filter | rows | avgtime | bytes | is_rrscan |
|-----|-----|------|-------------------------------|-----------------|------|---------|-------|-----------|
| 0 | 0 | 0 | scan tbl=428142 name=my_tbl | 103665 | 6 | 52814 | 1273 | t |
| 0 | 0 | 1 | project | 0 | 6 | 52814 | 0 | f |
| 0 | 0 | 2 | sort tbl=303 | 0 | 6 | 52814 | 1288 | f |
| 1 | 1 | 0 | scan tbl=303 name=Internal | 0 | 6 | 74 | 1288 | f |
| 1 | 1 | 1 | return | 0 | 6 | 74 | 0 | f |
| 1 | 2 | 0 | merge | 0 | 0 | 275 | 0 | f |
| 1 | 2 | 1 | project | 0 | 6 | 275 | 0 | f |
| 1 | 2 | 2 | return | 0 | 6 | 275 | 1387 | f |
实际上,列是TIMESTAMP实际上,列是TIMESTAMP