這是我的查詢 - 最後一個查詢是什麼導致我很痛: address.postcode字段是一個varchar(14)和你可以看到輸入格式,用戶在發送執行計劃顯示排序 - 但無法解決因爲查詢
DECLARE @ZipCode NVARCHAR(MAX) = ('06409;06471;11763;06443;06371;11949;11946;11742')
IF OBJECT_ID('tempdb..#ZipCodes') IS NOT NULL DROP TABLE #ZipCodes;
CREATE TABLE #ZipCodes (
Zipcode NVARCHAR(6)
)
INSERT INTO #ZipCodes (Zipcode)
SELECT zip.Token + '%'
FROM DMS.fn_SplitList(@ZipCode, ';') zip
CREATE NONCLUSTERED INDEX [idx_Zip] ON #ZipCodes (Zipcode)
IF OBJECT_ID('tempdb..#ZipCodesConstituents') IS NOT NULL DROP TABLE #ZipCodesConstituents;
CREATE TABLE #ZipCodesConstituents (
ConstituentID UNIQUEIDENTIFIER
, PostCode NVARCHAR(12)
)
CREATE NONCLUSTERED INDEX [idx_ZipCodesConstituents] ON #ZipCodesConstituents (ConstituentID, PostCode)
INSERT INTO #ZipCodesConstituents (ConstituentID, PostCode)
SELECT a.CONSTITUENTID
, a.POSTCODE
FROM #ZipCodes zip
JOIN DMS.address a
ON a.POSTCODE LIKE zip.Zipcode
where a.ISPRIMARY = 1
我試圖附加執行計劃 - 但沒有任何運氣... 基本的代碼段有61.9%的預估成本 和排序是61.5%
問題是什麼? – cyroxis
我想改善性能,並排序導致過剩。想就如何擺脫排序或其他優化方式想任何想法。 –
爲什麼在插入之前創建索引?我不知道沒有執行計劃的排序,但索引會減慢每個插入,因爲系統必須更新每插入一行的索引。這實際上可能是導致排序的原因,因爲sql尋找一種方法來最小化索引的影響。 – Randall