优化视图的 'Most Recent Month' 查询
Optimizing 'Most Recent Month' query for View
我目前有一个连接查询,我正在使用它来构建一个视图,该视图 returns 只有最近一个月内创建的那些记录,如下所示:
CREATE VIEW [dbo].[MostRecentMonth] AS
SELECT <fields>
FROM dbo.CensusFile
INNER JOIN (
SELECT MAX(CENSUS_MONTH) as MAXMONTH FROM dbo.CensusFile
)
AS child ON (dbo.CensusFile.CENSUS_MONTH = child.MAXMONTH)
GO
查询正在返回我期望的结果,但一直在寻找一种更优化的方法来更有效地构建针对大型数据集的 运行 查询。任何建议表示赞赏。
为了便于阅读,我会将标准移至它所属的 WHERE
子句:
CREATE VIEW dbo.MostRecentMonth AS
SELECT <fields>
FROM dbo.CensusFile
WHERE census_month = (SELECT MAX(census_month) FROM dbo.CensusFile);
另一种选择是 window 函数,但我认为它不会更快,而且可读性更差。
CREATE VIEW dbo.MostRecentMonth AS
SELECT <fields>
FROM
(
SELECT <fields>, MAX(census_month) OVER () AS maxmonth
FROM dbo.CensusFile
) with_maxmonth
WHERE census_month = maxmonth;
对于这两个查询最重要的是您在 census_month
:
上有一个索引
CREATE INDEX idx ON MostRecentMonth(census_month);
我目前有一个连接查询,我正在使用它来构建一个视图,该视图 returns 只有最近一个月内创建的那些记录,如下所示:
CREATE VIEW [dbo].[MostRecentMonth] AS
SELECT <fields>
FROM dbo.CensusFile
INNER JOIN (
SELECT MAX(CENSUS_MONTH) as MAXMONTH FROM dbo.CensusFile
)
AS child ON (dbo.CensusFile.CENSUS_MONTH = child.MAXMONTH)
GO
查询正在返回我期望的结果,但一直在寻找一种更优化的方法来更有效地构建针对大型数据集的 运行 查询。任何建议表示赞赏。
为了便于阅读,我会将标准移至它所属的 WHERE
子句:
CREATE VIEW dbo.MostRecentMonth AS
SELECT <fields>
FROM dbo.CensusFile
WHERE census_month = (SELECT MAX(census_month) FROM dbo.CensusFile);
另一种选择是 window 函数,但我认为它不会更快,而且可读性更差。
CREATE VIEW dbo.MostRecentMonth AS
SELECT <fields>
FROM
(
SELECT <fields>, MAX(census_month) OVER () AS maxmonth
FROM dbo.CensusFile
) with_maxmonth
WHERE census_month = maxmonth;
对于这两个查询最重要的是您在 census_month
:
CREATE INDEX idx ON MostRecentMonth(census_month);