2009-12-16 38 views
9

我想創建一個視圖上的索引,但我需要確保在創建索引時仍然可以讀取數據。我讀的是article建議創建一個非聚集索引時,如果指定ONLINE = ON選項(如下所示)中的數據仍然可讀:在SQL Server 2005表上創建非聚集索引是否阻止選擇?

CREATE UNIQUE CLUSTERED INDEX CLUST_IDX_SQLTIPS 
ON SQLTips (tip) with (ONLINE=ON) 

我是否理解正確嗎?在我創建索引時需要可讀的視圖上創建索引之前,我是否應該注意到任何潛在問題?

回答

14

聯機索引創建和重建僅在Enterprise Edition上可用。見How Online Index Operations WorkGuidelines for Performing Online Index Operations

有一些限制,最著名的有:

  • 聚集索引必須創建/離線重建中是否含有任何BLOB字段(圖像,NTEXT,文字,varchar(max),爲nvarchar(最大) ,varbinary(max)和xml)。
  • 視圖上的intitial聚集索引必須脫機創建。

你必須確保你的數據庫有足夠的空間來執行聯機索引操作,因爲它需要的表的除了到目前的規模大小約1.5倍。在創建在線索引期間,表格在數據庫中存在兩次,因此需要額外的空間。

由於您的情況屬於排除類別(視圖上的初始聚集索引),因此您不必擔心在線索引。您必須使用離線索引操作。

順便說一句,您還必須知道,只有在Enterprise Edition中,優化程序纔會考慮索引視圖。在較低版本上,必須在視圖中指定NOEXPAND子句以利用視圖上的可能索引。

+0

謝謝我沒有意識到這一點。我計劃在此視圖上創建兩個索引,即您提到的初始羣集,以及之後的非羣集。無論如何,當我創建初始羣集時,您是否知道將數據保存在我的視圖中是可讀的? 順便說一句我正在運行企業版。 – 2009-12-16 18:36:27

+0

聚簇索引視圖將鎖定表中的行,從而阻止讀取鎖定的行(在默認序列化級別下)。桌子有多大?我們是說幾秒鐘還是幾小時的索引創建時間?您可以考慮啓用讀取提交快照,這將允許SELECT不受影響。但是這會對系統產生全局影響,特別是對tempdb的影響,所以您應該事先定義好測試。 – 2009-12-16 18:43:17

+0

該表擁有超過900萬條記錄。我認爲這些索引大約需要15分鐘才能創建。如果人們無法閱讀15分鐘,那麼我會遇到問題。您能否更具體地說明啓用讀取操作會對系統造成的影響?你會如何推薦先測試? – 2009-12-16 18:47:55

2

有關於關於CREATE INDEXonline index operations的msdn文章的更多信息有很多關於它的信息。

如果您只做SELECT和UPDATE,那麼應該沒有問題。不太確定備份,也許最好在測試系統上嘗試一下,看看?

相關問題