У меня есть таблица продуктов от разных поставщиков, все вместе, так что есть много дубликатов SKU (ManuPartNo), есть другие элементы, цена, кол-во и т. Д. Однако я хочу выбрать самую высокую цену на основе SKU (ManuPartNo), а также сложите все кол-во для любого соответствующего SKU.У меня есть рабочий запрос, но мне было интересно, кто-нибудь может подсказать, как его ускорить, у таблицы, к которой я обращаюсь, 1,3 миллиона строк, и мой запрос выполняется около 40 секунд.Это не слишком медленно, но я пытаюсь узнать больше об оптимизации, и этот вопрос очень трудно найти в Google, поэтому, если кто-нибудь может дать мне какие-либо советы или указать мне правильное направление, это будет очень цениться.
Вотструктура таблицы, к которой я обращаюсь, и мой запрос сам по себе.
CREATE TABLE [dbo].[AllProductsFromAllDistis](
[ProdName] [varchar](max) NULL,
[ManuPartNo] [varchar](150) NULL,
[Manufacturer] [varchar](150) NULL,
[Price] [decimal](10, 2) NOT NULL,
[Qty] [int] NOT NULL,
[Weight] [decimal](10, 2) NULL,
[UpcCode] [varchar](50) NULL,
[Supplier] [varchar](50) NULL
) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]
и мой запрос, чтобы вернуть только значения с самой высокой ценой и добавить все кол-во любых дублирующих sku.
SELECT ProdName, ManuPartNo, Price, TotalQty, Weight, UPCCode, Supplier,
Manufacturer
FROM
(SELECT dbo.AllProductsFromAllDistis. *,
ROW_NUMBER() OVER(PARTITION BY ManuPartNo ORDER BY Price ASC) AS RN,
SUM(Qty) OVER(PARTITION BY ManuPartNo) AS TotalQty
FROM AllProductsFromAllDistis) AS t
WHERE RN = 1
ORDER BY ManuPartNo
Как я уже сказал, это прекрасно работает, но я ищу предложения по его ускорению.