单一记录的 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 的更多信息。
我正在尝试针对内部客户只想 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 的更多信息。