我有一個大型 T-SQL 存盤程序,其中包含 3 個對SELECT查詢作為引數傳入的 XML 值的陳述句的連接。
引數如下所示:
@Code xml = NULL
聯接如下所示:
AND (@Code IS NULL OR (t.Code IN (
select Tbl.Col.value('.[1]', 'nvarchar(2)')
from @Code.nodes('//codes/code') Tbl(Col)
)))
引數值的示例是:
'<codes><code>GB</code></codes>'
這些塊中可能有多達 100 個<code>...</code>元素。
執行計劃上顯示的每個元素都顯示,Cost: 0 %除了這些連接,顯示Cost: 49 %.
我能做些什么來縮短執行時間嗎?
uj5u.com熱心網友回復:
一般//后代軸比較慢,盡量使用正常的/子軸。
另外,使用.檢索節點值也很慢,最好使用text()
您可以執行以下語法之一,這可能比您擁有的更快
AND (@Code IS NULL OR
@Code.exist('/codes/code[text() = sql:column("t.Code")]')) = 1
)
-- or better
AND ISNULL(@Code.exist('/codes/code[text() = sql:column("t.Code")]'), 1) = 1
AND (@Code IS NULL OR (t.Code IN (
select Tbl.Col.value('text()[1]', 'nvarchar(2)')
from @Code.nodes('/codes/code') Tbl(Col)
)))
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/415059.html
標籤:
下一篇:從2個不同的表中查找計數
