2012-03-03 26 views
0

我有一個以READ COMMITTED隔離級別執行的事務。在事務中,我將10,000行放入名爲'Docs'的表中,DocId爲主鍵,3個索引分別位於VendorId,CompanyId和ProgramId上。但是,似乎索引在我提交數據之前不會更新。這是真的?有沒有一種方法可以在提交被調用之前強制索引在事務內更新?插入數據時,事務中的索引未更新?

+1

你有什麼證實這種信念? – 2012-03-03 06:17:19

+0

我同意Damien:你爲什麼認爲他們沒有更新? – 2012-03-03 09:00:43

+0

在向連接中其中一個表的'CustomerDocs'添加多條記錄後,事務中的查詢Q1花了很長時間。當'CustomerDocs'中的記錄很少時,插入多行不會減慢查詢Q1。所以我猜Q1正在做一個表掃描,如果索引不存在插入同一事務中的行,那麼需要更長的時間。 – Sunil 2012-03-04 13:58:37

回答

1

它不是真的(除非索引被禁用)。 未提交的索引更新將僅在READ UNCOMMITTED隔離級別或nolock提示中可用。

爲什麼會出現問題?你真的需要看到無法估計的數據嗎?未讀取通常用於避免鎖定開銷不讀取新數據。

+0

要使索引在同一索引內可用,是否仍需要在READUNCOMMITED模式下運行事務? – Sunil 2012-03-04 13:55:56

+0

聽起來像你不知道它是否使用索引。查看執行計劃以查看它是否是。在執行查詢之前在SSMS中按Ctrl + M. – 2012-03-04 14:48:59