[英]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.