性能问题 - Select 每个月第一次约会 table

Performance Issue - Select firstdate per month on a very big table

我有一个非常大的 table(超过 1.4 亿行,大小约为 230 GB)。有一个名为 "date_dim" 的列,其聚集索引为 asc。 table 中存储了 2015 年的所有数据。

我现在的目标是获取存储数据的月份的第一个日期。所以可能是一月份的数据是从5号开始的。所以我必须构建一个 'dynamic' 查询。

为了检索此数据,我创建了以下查询:

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

现在我的问题是查询需要很长时间才能获取数据。是否有其他选项可以构建性能更好的查询?对于为我的具体情况选择如此大的 table,您有什么性能建议吗?

实际上我无法对 table 本身进行任何更改,只能 'Read' 访问...

如果我理解你的问题,两个快速选项

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)

使用window函数:

SELECT distinct min([date_dim]) 
     over (partition by Year([date_dim]), month([date_dim])) as [FirstDate]
FROM myTable_2015
ORDER BY [date_dim]

如果你有 1.4 亿行,那么你很有可能每个月的第一天都有

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)