我有一张非常大的桌子(超过140密耳的行,大小约为230 gb)。有一个名为“date_dim”的列,带有聚簇索引asc。在表格中存储了2015年的所有数据。
我的目标是获取存储数据的一个月的第一个日期。因此可能是1月份数据从5日开始。所以我必须构建一个“动态”查询。
要检索此数据,我创建了以下查询:
SELECT
*
FROM (
SELECT
date_dim
,row_num = ROW_NUMBER() OVER (PARTITION BY MONTH(date_dim) ORDER BY date_dim ASC)
FROM myTable_2015 WITH (NOLOCK)
) AS s
WHERE
row_num = 1
ORDER BY
1
现在我的问题是查询有很长时间来获取数据。是否可能有其他选项来构建具有更好性能的查询?对于我的特定情况,您是否有任何表现建议选择这样的大表?
实际上我不能对表本身进行任何更改,只能“读取”访问...
答案 0 :(得分:1)
如果我理解你的问题,可以选择两个快速的选项
Select BOMonth = min(date_dim)
From myTable_2015
Group By year(date_dim),month(date_dim)
甚至
Select BOMonth = min(date_dim)
From (select distinct date_dim from myTable_2015 ) A
Group By year(date_dim),month(date_dim)
答案 1 :(得分:0)
使用窗口功能:
.proxy
答案 2 :(得分:0)
如果你有140密耳的行,那么很有可能你有每月的第一天
select distinct(date_dim)
from myTable_2015 WITH (NOLOCK)
where day(date_dim) = 1
或者你可以隔离第一个x
select min(date_dim)
from myTable_2015 WITH (NOLOCK)
where day(date_dim) <=5
group by month(date_dim)