我懷疑下面的查詢是瓶頸服務器,但我不確定如何調整查詢以使其更高效。如果您有任何建議,請讓我知道。我知道case語句對於查詢以及使用左連接而不是union可以。所以我認爲這個問題必須在where語句的其他陳述中。但正如我所說我不確定。需要很長時間才能執行SQL Server的SQL查詢
SELECT
svc.[Name] AS 'Type',
os.OrderID,
os.CustomerID,
os.Transit,
os.ApplicantFullName,
os.OriginalTransit,
ISNULL(p.UnitNumber , '') + ' ' + ISNULL(p.StreetNumber, '') AS 'Number', ISNULL(st.[Name], 'NULL') AS 'Street',
c.[Name] AS 'City',
p.PostalCode,
os.RequesterRefNo,
os.MortgagePurpose,
os.GrossTAT
os.NetTAT
os.StopTime
os.ModifiedGrossTAT,
os.ReOpenFlag,
os.MinReOpenDate,
O.NegotiatedFees,
O.BranchLogonID,
CASE
When os.Transit in ('710','740','745','750','760','770','820','830','850','871','7409','7709') THEN 'Calgary 1' When os.Transit in ('720','730','774','780','783','790','821','834','840','858','881','894') THEN 'Calgary 2' When os.Transit in ('744','763','810','7639')THEN 'Calgary 3'
When os.Transit in ('736','768','779','826','837','857','876','879','887','898','899')THEN 'North 2'
When os.Transit in ('716','726','737','738','746','767','778','798','818','838','846','878')THEN 'North 3' When os.Transit in ('180')THEN 'MDO Tr 180 Edmonton'
When os.Transit in ('460','02099','New','PRIMARY')THEN 'MDO TR 460 Calgary'
END AS 'ATBRegion1',
CASE
When os.Transit in
When os.Transit in
When os.Transit in
When os.Transit in
When os.Transit in
When os.Transit in
('710','740','745','750','760','770','820','830','850','871','7409', ,'858','881','894','744','763','810','7639') THEN 'Calgary' ('728','731','735','751','755','771','775','791','795','824','835','854','855','875','885','748','844','847','888')THEN 'Edmonton' ('722','733','734','742','782','793','812','822','842','853','893')THEN 'South' ('724','753','772','773','832','836','866','867','877','896','712','781','873')THEN 'Central' ('719','729','739','749','759','769','789','799','819','829','737','738','746','767','778','798','818','838','846','878')THEN 'North' ('180','460','02099','New','PRIMARY')THEN 'MDO/Consumer Credit'
END AS 'ATBRegion2',
CASE
WHEN os.CustomerID
WHEN os.CustomerID
WHEN os.CustomerID
WHEN os.CustomerID
WHEN os.CustomerID
WHEN os.CustomerID
WHEN os.CustomerID
ELSE os.CustomerID
like '%ATB%' THEN 'ATB'
like '%PROS%' THEN 'PROSPERA'
like '%BLC%' THEN 'BLC'
like 'BW%' THEN 'BWorx'
like 'CIBC%' THEN 'CIBC'
like '%PROS%' THEN 'PROSPERA'
like 'FNF%' THEN 'CIBC'
END AS CLIENTIDCLEAN,
CASE
WHEN os.Cancelled =
0x1 THEN 'Cancelled'
ELSE ''
END AS 'Cancelled',
os.AppraiserFirm,
CASE
WHEN ai.AppraiserTypeID = 1 THEN 'SS' WHEN ai.AppraiserTypeID = 2 THEN 'SA' WHEN ai.AppraiserTypeID = 3 THEN 'UC' WHEN ai.AppraiserTypeID = 4 THEN 'NC' WHEN ai.AppraiserTypeID = 5 THEN 'UCFF'
FROM
END AS 'AppraiserType',
CASE
WHEN CHARINDEX(' ',ADE.[ESTIMATED_MARKET_VALUE.1]) = 0 THEN Substring(REPLACE(REPLACE(CAST(ADE.[ESTIMATED_MARKET_VALUE.1] as NVarchar(4000)),',',''),'$',''), 1, CHARINDEX('.',
REPLACE(REPLACE(CAST(ADE.[ESTIMATED_MARKET_VALUE.1] as NVarchar(4000)),',',''),'$',''), 1)) ELSE
Substring(REPLACE(REPLACE(CAST(ADE.[ESTIMATED_MARKET_VALUE.1] as NVarchar(4000)),',',''),'$',''), 1, CHARINDEX(' ', REPLACE(REPLACE(CAST(ADE.[ESTIMATED_MARKET_VALUE.1] as NVarchar(4000)),',',''),'$',''), 1))
END as 'AppraisedValue',
REPLACE(REPLACE(CAST(ADE.[ESTIMATED_MARKET_VALUE.1] as NVarchar(4000)),',',''),'$','') as AppValue, REPLACE(REPLACE(CAST([EST_MARKET_VALUE_RANGE_FROM.1] as NVarchar(4000)),',',''),'$','') as AppValueRangeFrom, REPLACE(REPLACE(CAST([EST_MARKET_VALUE_RANGE_TO.1] as NVarchar(4000)),',',''),'$','') as AppValueRangeTo, NULLIF(os.MarketValue,0) AS 'EstimatedMarketValue',
CASE WHEN UC.Cityid is null THEN 'Rural' ELSE 'Urban' END as Region,
CASE WHEN SUBSTRING(p.postalcode, 2, 1) = '0' then 'Rural' ELSE 'Urban' END as PostalRural, EL.TTLORIGINVOICEAMOUNT as Price,
EL.TTLVENDORCOST as Cost,
os.AppraiserGrossTAT,
os.AppraiserNetTAT,
EXID.expid as EXCEPTIONID,
SD.PROPERTYVALUE as 'CleanAppraisedValue',
r.FirstName + ' ' + r.LastName AS "Requester Name"
DataMart.dbo.OrderSummary AS os
left JOIN
CAPS.dbo.[order] AS o on os.orderid = o.orderid Left Join
CAPS.dbo.[Requester] as r on o.RequesterID = r.RequesterID left JOIN
CAPS.dbo.Service AS svc ON(svc.ServiceID = os.ServiceID) left JOIN
CAPS.dbo.OrderStatus AS ostat ON(ostat.OrderStatusID = o.OrderStatusID) left JOIN
CAPS.dbo.Property AS p ON(p.PropertyID = os.PropertyID) left JOIN
CAPS.dbo.AppraiserInfo AS ai ON (ai.gp_vendorID = os.AppraiserFirm) LEFT JOIN
CAPS.dbo.Province AS prov ON(prov.ProvinceID = p.ProvinceID) LEFT JOIN
CAPS.dbo.City AS c ON(c.CityID = p.CityID) LEFT JOIN
CAPS.dbo.Street AS st ON(st.StreetID = p.StreetID) LEFT JOIN
Caps.cruser.UrbanCity UC ON C.Cityid = UC.Cityid LEFT JOIN
fbc.dbo.TGO_EXTENDEDORDERS_LINE EL WITH (NOLOCK) ON O.Orderid = EL.Ordernumber LEFT JOIN
(select [ORDERNUMBER], MAX(expID) as expid from (SELECT
[ORDERNUMBER] ,isnull([EXCEPTIONID],0) as expID
FROM [FBC].[dbo].[TGO_EXTENDEDORDERSERVICES]) dd group by dd.[ORDERNUMBER]) EXID on EXID.ORDERNUMBER = os.orderid
LEFT JOIN (select ORDERID, max(PROPERTYVALUE) as PROPERTYVALUE from TrendPoint.dbo.SourceData where DATAID = 0 and CLEANDATA_FLAG in (0,1)group by orderID having
COUNT(*) < 3) SD on SD.ORDERID = os.OrderID
LEFT JOIN (select * from CAPS.dbo.AppraisalDataExtract where WorkingCopy = 0)ADE on ADE.OrderID = os.OrderID
WHERE os.CompletionDate >= '2012-01-01' and os.OrderID in (2427915, 2427917,2437863,2437880,2437630)
能否請您發佈說明查詢計劃,您正在使用的表的索引,您要過濾的列的選擇性以及絕對最小值的行數? – Ben