查询中 UNNEST 操作的时间成本?

问题描述 投票:0回答:1

这是针对 PrestoSQL 的

假设 col1, col2, col3 具有相同的基数,并假设 Table 有 N 行

 SELECT c1 from Table, UNNEST(col1) AS t(c1) 


 SELECT c1, c2 from Table, UNNEST(col1, col2) AS t(c1, c2) 


 SELECT c1, c2, c3 from Table, UNNEST(col1, col2, col3) AS t(c1, c2, c3) 

这三个查询的时间复杂度有何不同?就时间复杂度而言,第三个的成本会比第一个高 N^3 倍,而第二个的成本会比第一个高 N^2 倍吗?

如何根据列基数和表大小来衡量时间复杂度?

sql time-complexity presto trino unnest
1个回答
0
投票

这三个查询的时间复杂度有何不同?就时间复杂度而言,第三个的成本会比第一个高 N^3 倍,而第二个的成本会比第一个高 N^2 倍吗?

虽然在不查看源代码的情况下很难声明任何内容,但此类操作没有理由是 N(表中的行数)的幂,

unnest
具有多个数组列 将导致数组匹配在索引上,因此就时间复杂度而言,使用 1,2 或 3 个数组列并不重要,它将是
O(N*m)
,其中
m
是数组每行的平均基数(或者如果所有行都有数组)具有相同基数的列,然后
O(N*m)
,其中
m
只是一个基数)。

但是可以肯定的是,查询会更耗时,因为您返回更多数据,但所使用的数组列数并不是指数级的。

© www.soinside.com 2019 - 2024. All rights reserved.