我在 SQL Azure 上創建了一個索引,其中 Query 作業得很好,并且索引創建成功但有一個例外 ONLINE = OFF
我創建索引的查詢:
CREATE NONCLUSTERED INDEX [nci_wi_tbl_transactions] ON [dbo].[tbl_transactions] (
[bank_account_id]) INCLUDE ([bankcode]) WITH (ONLINE = ON)
查看表中的索引時是這樣的:
CREATE NONCLUSTERED INDEX nci_wi_tbl_transactions ON dbo.tbl_transactions ( bank_account_id ASC )
INCLUDE ( bankcode )
WITH ( PAD_INDEX = OFF ,FILLFACTOR = 100 ,SORT_IN_TEMPDB = OFF , IGNORE_DUP_KEY = OFF , STATISTICS_NORECOMPUTE = OFF , ONLINE = OFF , ALLOW_ROW_LOCKS = ON , ALLOW_PAGE_LOCKS = ON )
ON [PRIMARY ]
如果您注意到上面的索引是用 ONLINE = OFF
我試圖弄清楚為什么它使用ONLINE = OFF而不是創建索引ONLINE = ON,是否可以使用創建非聚集索引ONLINE = ON。如果是,我該如何創建索引ONLINE = ON
我在這里錯過了什么嗎。
uj5u.com熱心網友回復:
WITH (ONLINE = ON)是CREATE INDEX陳述句的屬性,而不是創建的索引的屬性。
假設,兩個CREATE INDEX相同的陳述句,除了一個 hasWITH (ONLINE = ON)和另一個 hasWITH (ONLINE = OFF)將導致創建完全相同的 index。
uj5u.com熱心網友回復:
元資料根本不會跟蹤您是如何創建它的,因為這是一個操作/運行時屬性,不會成為索引的永久屬性。這就像一行維護有關添加行時資料庫處于何種恢復模式的資訊。
您能否再解釋一下,以便我找到解決此問題的方法。
我的意思是,當您創建索引時,SQL Server 不記得您是否使用ONLINE = ON或ONLINE = OFF. 因此,當您查看屬性或從 SSMS 生成新腳本時,它總是處于關閉狀態。人們使用了其他變通方法,例如手動撰寫索引腳本,包括檢查是否可以在線構建索引(通過手動添加ONLINE = ON),并且如果可能的話總是這樣做。例如:
- 使用 T-SQL 撰寫資料庫中的所有 SQL Server 索引
或者,如果您從 SSMS 生成腳本,您可以簡單地手動更改輸出并ONLINE = ON始終嘗試,只是要做好準備,有時該選項是不可能的。
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/416750.html
標籤:
