Выберите максимальное значение каждой группы, используя раздел - PullRequest
0 голосов
/ 06 мая 2019

У меня есть следующий код, который требует много времени для выполнения.Что мне нужно сделать, это выбрать столбец с номером строки, равным 1, после разбиения его на три столбца (col_1, col_2, col_3) [которые также являются ключевыми столбцами] и упорядочение по некоторым столбцам, как указано ниже.Количество записей в таблице составляет около 90 миллионов.Я придерживаюсь лучшего подхода или есть другой лучший?

  with cte as (SELECT
     b.*
    ,ROW_NUMBER() OVER ( PARTITION BY col_1,col_2,col_3
                         ORDER BY new_col DESC, new_col_2 DESC, new_col_3 DESC  ) AS ROW_NUMBER
  FROM (
    SELECT
       *
      ,CASE
         WHEN update_col = '        ' THEN new_update_col
         ELSE update_col
       END AS new_col_1
    FROM schema_name.table_name
    ) b
  )
 select top 10 * from cte WHERE ROW_NUMBER=1

1 Ответ

0 голосов
/ 06 мая 2019

В настоящее время вы применяете CASE к различным столбцам, что влияет на все строки таблицы базы данных.CASE (Сравнение строк) - это дорогостоящий метод.

В конце вы сохраняете только записи с ROW NUMBER = 1. Если я предполагаю, что этот фильтр хранит половину всех ваших записей, это увеличит время выполнения запросаесли вы сначала отфильтруете (сначала сгенерируйте номер строки и сохраните строки с RN = 1), а затем примените метод CASE к столбцам.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...