我有一個大型 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>'
<code>...</code>這些塊中可能有多達 100 個元素。
在執行計劃表示顯示中的每一個元素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/qukuanlian/313206.html
標籤:查询语句 sql-server-2008 sqlxml
上一篇:區塊鏈技術——框架&基本原型
下一篇:從2個不同的表中查找計數
