2010-01-07 31 views
2

我不知道索引視圖是什麼,但我想知道底層表中的數據發生了什麼變化時發生了什麼? 整個視圖緩存丟棄od只是改變了行嗎?SQL索引視圖:如果數據已更改,會發生什麼

我對用於搜索酒店可用性(+ 100k記錄)的幾個表(+5)進行了非常複雜的查詢,並且IMHO索引視圖可以顯着提高性能。 但是數據(少數幾行)經常更改(房間已售出,管理員atc處更改了免費房間),並且如果每次只更改一行時都會重新構建視圖,那麼對我的應用來說就是瓶頸。

或任何想法如何「緩存」非常coplex查詢?

謝謝。

回答

3

從TechNet文檔:

不同於普通的索引,單行 插入到任何參與 表可導致多個行中的索引視圖改變 。這是因爲 單行可能會與另一個表的多個 行連接。 同樣適用於更新和刪除。因此,維護 索引視圖可能比維護 表上的索引更昂貴 。

來源:

http://technet.microsoft.com/en-us/library/cc917715.aspx#XSLTsection124121120120

即它聽起來好像行被更新酌情而不必更新/重建完整的視圖。

+1

我使用索引視圖重寫了我的SP,性能令人震驚!我希望在重建索引視圖時不會有大的額外維護。 – Feryt 2010-01-09 00:00:24

0

我假設你正在運行sql服務器。 100k行不是很多。如果您要加入5個表格,我建議您在考慮實施索引視圖之前,確保在加入的列上覆蓋索引。使用查詢分析器直接在查詢中查找瓶頸。如果你在這麼小的表上有性能問題,那裏可能會有令人討厭的表掃描。

+0

如果連接5個100k行的表時出現性能問題,那麼我懷疑查詢中存在問題,因此將其移入索引視圖將使數據庫服務器更頻繁地重新運行低效查詢。 我建議檢查原始查詢的執行計劃,特別是尋找表掃描,看看你是否可以重新工作和/或改善索引,讓它在進一步處理索引視圖之前運行得更快。 – eftpotrm 2010-01-08 11:17:39

+0

嗨。 檢查表掃描的執行計劃(和類似慢速任務)是我在調整SQL腳本時總是要做的第一件事情。查詢有很多UDF,在將它們移至索引視圖後,它們並不是始終計算在內,並且性能非常好。 – Feryt 2010-01-09 00:04:07

相關問題