为压缩超表中特定列启用范围统计信息跟踪。这会跟踪每个数据块中该列的值范围。用于查询优化期间的数据块剪枝。
最佳实践是在与分区列相关的列上启用范围跟踪。换句话说,在查询的 WHERE
子句中引用的辅助列上启用跟踪。
TimescaleDB 支持 smallint
、int
、bigint
、serial
、bigserial
、date
、timestamp
和 timestamptz
数据类型的最小值/最大值范围跟踪。当使用 compress_chunk 函数压缩属于此超表的数据块时,会计算最小值/最大值范围。范围以起始值(包含)和结束值(不包含)的形式存储在 chunk_column_stats
目录表中。
通过这种方式,您可以将此类列的最小值/最大值存储在此目录表中的每个数据块级别。这些最小值/最大值范围不参与数据的分区。当 SQL 查询的 WHERE
子句指定列的范围时,这些范围用于数据块剪枝。
在启用了统计信息跟踪的列上执行 DROP COLUMN 最终会删除目录表中的所有相关条目。
在压缩数据块上调用 decompress_chunk 会重置其在 chunk_column_stats
目录表中的条目,因为它现在可用于 DML,并且最小值/最大值范围可能会因数据块中任何进一步的数据操作而更改。
默认情况下,此功能处于禁用状态。要启用数据块跳过,请在 postgresql.conf
中设置 timescaledb.enable_chunk_skipping = on
。当您从使用压缩但不支持数据块跳过的数据实例升级时,您需要重新压缩先前压缩的数据块才能使数据块跳过生效。
在此示例中,您将 conditions
表转换为超表,并在 time
列上进行分区。然后,您指定并启用其他列以跟踪范围。
SELECT create_hypertable('conditions', 'time');SELECT enable_chunk_skipping('conditions', 'device_id');
名称 | 类型 | 默认值 | 必需 | 描述 |
---|---|---|---|---|
column_name | 文本 | - | ✔ | 要跟踪范围统计信息的列 |
hypertable | REGCLASS | - | ✔ | 列所属的超表 |
if_not_exists | 布尔值 | false | ✖ | 设置为 true ,以便在未跟踪列的范围时发送通知。默认情况下,会抛出错误 |
列 | 类型 | 描述 |
---|---|---|
column_stats_id | 整数 | TimescaleDB 内部目录中条目的 ID |
enabled | 布尔值 | 当启用跟踪时,if_not_exists 为 true ,且未添加新条目时,返回 true |
已添加 |
关键词
在此页面上发现问题?报告问题 或 在 GitHub 上编辑此页。