mrprakash Ответов: 1

Sql select query очень медленный для извлечения данных


здесь жирный код является основной проблемой для медленной выборки

Select distinct isnull(V.VendorItemId,0) as VendorItemId  , isnull(V.VendorItemNumber,I.Ord_guide) as VendorItemNumber,
isnull(V.VendorItemDescription,I.Pkg_desc) as VendorItemDescription,
Id=(select Min(k.Id) from dbo.InvoiceImportDataPrice k where K.Ord_guide=I.Ord_guide and K.Price=I.Price
and k.Pkg_desc=I.Pkg_desc and k.Store_name=I.Store_name and k.InvoiceImportHistoryId = 128),
I.InvoiceImportHistoryId,I.Price,isnull(V.CurrentPrice,0) as CurrentPrice,ISNULL(ISNULL(V.CurrentPrice, 0) - ISNULL(I.Price, 0), 0) AS differencePrice,
I.Invoice_No, I.Sold_to, I.Store_name, I.Deliv_date,
(  CASE WHEN isnull(I.Qty_ship,'0')='0' THEN '-0' else I.Qty_ship   END ) AS Qty_ship, I.Ship_um, 
(  CASE WHEN isnull(I.Qty_ord,'0')='0' THEN '-0'  else I.Qty_ord   END ) AS Qty_ord,  I.Item_no, I.Weight, 
(  CASE WHEN isnull(I.Amount,'0')='0' THEN '-0'  else I.Amount   END ) AS Amount, I.Pkg_desc, I.Tax_amount, I.Ord_guide
,(select count(*) FROM dbo.InvoiceImportDataPrice IP where IP.Pkg_desc=V.VendorItemDescription
and IP.Item_no= V.VendorItemNumber and  IP.Price = V.CurrentPrice)
as PriceDiscrepancyCount
from dbo.InvoiceImportDataPrice  I
left join dbo.VendorItems V WITH (NOLOCK) on V.VendorItemNumber = I.Ord_guide
where (I.InvoiceImportHistoryId = 128 and VendorItemDescription != '"Sales Tax"') or
(I.InvoiceImportHistoryId = 128 and isnull(V.VendorItemDescription,'')='')


Что я уже пробовал:

когда я выключаю оба кода, то данные извлекаются быстро, но мне нужны оба кода. общее количество записей-2833

1 Ответов

Рейтинг:
1

Paw Jershauge

Здесь может быть тонна разных вещей, неправильных здесь.

  • Сопоставление

  • Нет покрывающих индексов для подзапросов

  • Присоединение к большим колоннам nvarchar вообще не рекомендуется

  • Статистика

вы называете это..