Performance 类T-SQL查询性能+交叉连接
tst总计包含85k条记录,tmprec总计包含255k条记录。上述查询的目的是从tblNewZone获取记录的匹配邮政编码,该邮政编码从匹配的sConsigneePostcodeFirst开始 问题如上所述,执行查询需要7分钟。我在查询中添加了索引,尝试了like查询,尝试了文本搜索索引Performance 类T-SQL查询性能+交叉连接,performance,tsql,sql-like,Performance,Tsql,Sql Like,tst总计包含85k条记录,tmprec总计包含255k条记录。上述查询的目的是从tblNewZone获取记录的匹配邮政编码,该邮政编码从匹配的sConsigneePostcodeFirst开始 问题如上所述,执行查询需要7分钟。我在查询中添加了索引,尝试了like查询,尝试了文本搜索索引 如果我能做些什么来改进查询,请告诉我。Top 1是不确定的,没有唯一的顺序,因为我看到了几个操作,您希望改进哪一个? WITH tst AS (
如果我能做些什么来改进查询,请告诉我。Top 1是不确定的,没有唯一的顺序,因为我看到了几个操作,您希望改进哪一个?
WITH tst
AS (
SELECT nz.sPostcode op
,zp.nZoneCountryID
,zp.sPostcode
,zp.nZoneID
,zp.nInjectionID
FROM dbo.tblZonePostcode zp
INNER JOIN tblNewZone nz ON nz.nPostcodeID = zp.NewZoneId
WHERE CHARINDEX('%', zp.sPostcode) = 1
AND zp.sPostcode IS NOT NULL
AND isnumeric(zp.sPostcodeRange) = 0
)
SELECT *
INTO #tmptst
FROM tst;
CREATE INDEX idx_sPostcode12 ON #tmptst (sPostcode);
CREATE INDEX idx_x1 ON #tmptst (nZoneCountryID);
CREATE INDEX idx_x2 ON #tmptst (nInjectionID);
CREATE INDEX idx_x3 ON #tmptst (nZoneID);
UPDATE #tmprec
SET calculatedPostCodeZone = (
SELECT TOP 1 zp.op
FROM #tmptst zp
WHERE zp.nZoneCountryID = CalculatedCountryId
AND zp.nInjectionID = CalculatedinjectionPointId
AND zp.nZoneID = CalculatedZoneId
AND CHARINDEX(zp.sPostcode, sConsigneePostcodeFirst) = 1
)
WHERE CalculatedRateChartGroupID > 0
AND calculatedRatechartValues IS NULL
AND calculatedPostCodeZone IS NULL
AND CalculationStatus IS NULL
AND 0 < (
SELECT count(1)
FROM #tmptst
);