我怀疑下面的查询是瓶颈服务器,但我不确定如何调整查询以使其更高效。如果您有任何建议,请让我知道。我知道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