簡體   English   中英

簡單的SQL更新執行速度非常慢

[英]Simple SQL Update executes very slowly

SQL Server 2008 R2。

運行一個看起來像這樣的簡單Update命令

UPDATE [group_mtm] SET group = foobar where user in (u1,u2,u3,...u19)

查詢僅更新1行,但需要超過2秒。 這是一個2屬性表,用作多對多結點。 表目前只有大約300條記錄。 主鍵=組和用戶屬性上的組合鍵。

我已經設置了統計信息來檢查它,查詢執行涉及一堆其他沒有涉及業務的表:

Table 'foobar'. Scan count 1, logical reads 21214, physical reads 0, read-ahead reads 0, lob logical reads 0, lob physical reads 0, lob read-ahead reads 0.
Table 'Worktable'. Scan count 1664, logical reads 42674, physical reads 0, read-ahead reads 0, lob logical reads 0, lob physical reads 0, lob read-ahead reads 0.
Table 'mail_mtm'. Scan count 1, logical reads 428, physical reads 0, read-ahead reads 0, lob logical reads 0, lob physical reads 0, lob read-ahead reads 0.
Table 'event'. Scan count 1, logical reads 893, physical reads 0, read-ahead reads 0, lob logical reads 0, lob physical reads 0, lob read-ahead reads 0.
Table 'user'. Scan count 0, logical reads 91, physical reads 0, read-ahead reads 0, lob logical reads 0, lob physical reads 0, lob read-ahead reads 0.
Table 'addresses'. Scan count 1, logical reads 12, physical reads 0, read-ahead reads 0, lob logical reads 0, lob physical reads 0, lob read-ahead reads 0.
Table 'mail'. Scan count 1, logical reads 79, physical reads 0, read-ahead reads 0, lob logical reads 0, lob physical reads 0, lob read-ahead reads 0.
Table 'links'. Scan count 1, logical reads 18, physical reads 0, read-ahead reads 0, lob logical reads 0, lob physical reads 0, lob read-ahead reads 0.
Table 'group_mtm'. Scan count 20, logical reads 120, physical reads 0, read-ahead reads 0, lob logical reads 0, lob physical reads 0, lob read-ahead reads 0.

(20 row(s) affected)

(1 row(s) affected)

我唯一能想到的是foobar是和索引視圖,也許花費在維護它上,所以我檢查了執行計划; 它確實發揮作用(但只有11%的成本)。

為什么需要2秒多?

我在這看什么?

執行計划建議我在事件上添加一個索引,但事件甚至不應該涉及這里,而且只有13%的成本。

如果由於某種原因不能將其他表拉入其中,我覺得這應該是閃電般快速的。

有人可能會給我關於索引視圖增加一般數據庫開銷的sage建議; 但是,對於索引視圖提供的某些查詢,所有其他操作都需要花費相當大的費用才能快速查看。

教我; 謝謝,麻煩您了!

XML執行計划太大了,不能發布文本,我沒有看到附加的選項,所以pastebin救援: http//pastebin.com/BgjBxLfc

這可能不是完整的答案,但擴展sql查詢以進一步限定字段名稱:[table]。[field]。 我假設'group'是group_mtm中的一個字段,但看起來你正試圖將'foobar'表分配給它?

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM