Оптимизация запроса «Самый последний месяц» для просмотра - PullRequest
0 голосов
/ 03 октября 2018

В настоящее время у меня есть запрос на соединение, который я использую для создания представления, которое возвращает только те записи, созданные за последний месяц, как показано ниже:

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

Запрос возвращает ожидаемые результаты,но искал более оптимальный способ построения запроса для более эффективной работы с большим набором данных.Любые предложения приветствуются.

1 Ответ

0 голосов
/ 03 октября 2018

Для удобства чтения я бы переместил критерии в предложение WHERE, где оно принадлежит:

CREATE VIEW dbo.MostRecentMonth AS
SELECT <fields>
FROM dbo.CensusFile
WHERE census_month = (SELECT MAX(census_month) FROM dbo.CensusFile);

Другой вариант - это оконная функция, но я не думаю, что она будет быстрее, и дажеменее читабельный.

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);
...