【发布时间】:2019-06-12 06:14:49
【问题描述】:
所以这是我正在调整的存储过程的一部分。我发现这运行得很慢。我大约需要3个小时。我认为数据库可能缺少索引或视图。我相信joins 是它如此缓慢的原因,但我不知道如何拆分连接,因此 Sql 处理它们并不困难。我以为临时表。如果你能帮忙谢谢。
SELECT ftrec.AccountName,
cast(ftrec.AssetId as varchar(50)) as AssetId,
va.Class as Category,
gt.Name as RegisteredGrade,
gtu.Name as FinishedGrade,
'Recycling' as SKU,
DATENAME(month,ftrec.CreatedOn) + ' ' + cast(DATEPART(yyyy,ftrec.CreatedOn) as varchar(50)) AS ServiceCompleteMonth,
ISNULL(CASE ftRec.RateTypeID
WHEN 1 THEN a.Weight
ELSE 1 END * ftRec.Rate,0) as ServiceTotal,
itwrec.Name as 'Warehouse',
asu.UserName as 'TechnicianName'
FROM itAsset a (nolock)
inner JOIN vAssetSimpleView va on a.AssetRecId = va.AssetId
inner JOIN dbo.itGradeTypes gtu ON gtu.RecID = a.Upgrade_Grade
inner JOIN itGradeTypes gt ON va.Grade = gt.RecId
inner JOIN FinancialTransactions ftRec (nolock) ON ((ftRec.AssetID = a.AssetRecID) OR (ftRec.FKeyID = a.OrigTransactionID and ftRec.AssetID = 0)) AND ftRec.FinancialTypeID = 1
INNER JOIN ittransactionprocess tpRec (nolock) on ftRec.fkeyid = tpRec.transactionid
inner JOIN dbo.itLotTrips lt ON a.OrigLotNumber = lt.LotNumber
inner JOIN dbo.itDocks d ON lt.DockID = d.DockID
inner JOIN dbo.itWarehouse itwrec ON d.WarehouseID = itwrec.WarehouseID
--LEFT JOIN itWarehouse itwrec (nolock) on ftrec.WarehouseID = itwrec.WarehouseID
inner JOIN Aspnet_users asu (nolock) ON asu.userid = tprec.ModifiedBy
WHERE ftrec.CreatedOn > @StartDate AND ftrec.CreatedOn < @EndDate
AND a.LockedStatus = 5
--and ftrec.Assetid = 285912
【问题讨论】:
-
我假设这是一个视图 vAssetSimpleView。是否可以加入物理表而不是视图?此外,如果您可以与这些表中的行共享您的执行计划,这将有助于人们给出答案。如果可以,您也可以使用加入提示,请参阅此链接中的详细信息。 docs.microsoft.com/en-us/sql/t-sql/queries/…
标签: sql performance join query-optimization sql-tuning