单一记录的 Unnest 查询优化

Unnest Query optimisation for singular record

我正在尝试针对内部客户只想 return 一个结果 *(及其关联的嵌套数据集)优化我的查询。我的目标是减少查询进程大小。

但是,无论我查询的是 1 条记录(具有未嵌套的 48,000 长度数组)还是整个数据集(10,000 条记录,未嵌套的数组总长度为 514,048,748),它似乎都是完全相同的值!

所以我的 table 条记录查询结果:

SELECT test_id, value
FROM <my_table_reference>, unnest(TimeSeries)timeseries
WHERE test_id= "T0003" and SignalName = "Distance";

看起来像这样:

test_id value
T0003 1.0
T0003 2.0
T0003 3.0
T0003 4.0

(48000 行)

这将持续到 1 条记录的值(距离)= 48000m(48000 行):WHERE == 'T0003

总进程为 3.84GB

整个 table(~10,000 条记录):

SELECT test_id, value
FROM <my_table_reference>, unnest(TimeSeries)timeseries
WHERE SignalName = "Distance";

看起来像这样:

test_id value
T0001 1.0
T0001 2.0
T0001 3.0
T0001 4.0

(514,048,748 行)

总进程为 3.84GB

为什么两个查询的进程大小相同,我如何针对单个行提取对其进行优化?

发生这种情况是因为仍然需要进行完整的 table 扫描才能找到与指定 ID 相同的所有测试 ID。

从您的示例中不清楚哪些列是 timeseries 记录的一部分。如果 test_id 不是其中之一,我建议将 table 聚集在 test_id 列上。通过聚类,数据会自动按照test_id列的内容进行组织。

因此,当您在该列上使用过滤器进行查询时,不需要完全扫描来查找所有值。

阅读有关集群 tables here 的更多信息。