Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 SQL-запрос  [new]
ferzmikk
Member

Откуда:
Сообщений: 2031
Здравствуйте!

Есть SQL-запрос, который из таблицы с количеством строк 16 000 000 строк ищет дублирующие ТТ+SKU+Дата. Исходная таблица в представлении. Индексы по таким полям как [Код ТТ], [Код продукции] и [Дата] есть.
+SQL-запрос
SELECT
	a.[Код ТТ],
	a.[Код продукции],   
        a.[Дата],
	c.[Количество строк]
FROM
	(SELECT DISTINCT
            [Код ТТ],
            [Код продукции],
            [Дата]
         FROM
            [Profit].[promo].[aux_sales_mark_action]) as a
OUTER APPLY
	(SELECT
              COUNT (*) as [Количество строк]
         FROM
              [Profit].[promo].[aux_sales_mark_action] b
         WHERE
	      a.[Код ТТ] = b.[Код ТТ]
	      AND
	      a.[Код продукции] = b.[Код продукции]
	      AND
	      a.[Дата] = b.[Дата]) as c
WHERE
    c.[Количество строк]>1
Запрос выполняется долго. Насколько возможно оптимизировать SQL-запрос так, чтобы уменьшить время выгрузки? Темповая таблица поможет решит эту проблему, например, вложенный запрос (SELECT DISTINCT ...) затолкать в TEMP?
27 авг 18, 14:50    [21655052]     Ответить | Цитировать Сообщить модератору
 Re: SQL-запрос  [new]
Гавриленко Сергей Алексеевич
Member

Откуда: Moscow
Сообщений: 36695
Удалите одноразово дубликаты и ничего больше не надо будет искать.

И вот так будет в два раза быстрее (и короче):

SELECT 
    [Код ТТ],
    [Код продукции],
    [Дата],
    [Количество строк] = count(*)
FROM [Profit].[promo].[aux_sales_mark_action]
group by
    [Код ТТ],
    [Код продукции],
    [Дата]
having count(*) > 1
27 авг 18, 15:05    [21655078]     Ответить | Цитировать Сообщить модератору
 Re: SQL-запрос  [new]
ferzmikk
Member

Откуда:
Сообщений: 2031
Гавриленко Сергей Алексеевич,

Спасибо. 26 секунд против больше двух часов
27 авг 18, 15:17    [21655093]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить