考虑使用CTE的以下格式的查询:
WITH
t1 AS (SELECT some_data1 FROM some_table),
t2 AS (SELECT some_data2 FROM t1)
SELECT some_data3 FROM t2;
问题1:
执行查询时,是否会完全构建临时表t1并将其保存在内存中,然后完全基于来自t1的数据构建t2,然后SELECT可以针对t2运行
问题2:
如果t1和t2是不能存储在内存中的大表,它们会被写到磁盘上,从而使查询变慢吗?
问题3:
对于大表,应该避免这种类型的查询吗?
我有一个非常大的表(超过1.4亿行,大小约230 gb)。有一个列,名为"date_dim“,具有聚集索引asc。表中存储了2015年以来的所有数据。
我现在的目标是获得一个月的第一个数据被存储的日期。因此,可能是在一月份,数据开始于第五天。因此,我必须构建一个“动态”查询。
为了检索这些数据,我创建了以下查询:
SELECT
*
FROM (
SELECT
date_dim
,row_num = ROW_NUMBER() OVER (PARTITION BY MONTH(date_dim) ORDER BY date_dim