Sql-Server

線上創建非集群與離線創建非集群

  • June 15, 2022

我知道非聚集索引使用比聚集索引更大的空間。Azure SQL提供了使用 ONLINE = { ON | 創建非聚集索引的選項。離開 }。

  1. 線上和離線的 NCI 創建有何不同?
  2. 創建線上和離線索引時消耗的磁碟大小會有所不同嗎?如果是,有沒有辦法計算線上/離線索引創建的磁碟大小?
  1. 線上和離線的 NCI 創建有何不同?

線上執行索引操作

ONLINE 選項允許在這些索引操作期間並髮使用者訪問基礎表或聚集索引數據以及任何關聯的非聚集索引。

換句話說,在整個操作過程中,正在創建的索引(在您的情況下為非聚集索引)不會被排他地鎖定而無法訪問。因此,其他查詢將能夠在它進行此類操作時使用它ONLINE

如果它是使用該OFFLINE選項創建的,那麼索引將被排他地鎖定以禁止訪問,直到它完全完成創建為止。

  1. 創建線上和離線索引時消耗的磁碟大小會有所不同嗎?如果是,有沒有辦法計算線上/離線索引創建的磁碟大小?

我相信磁碟空間差異量通常應該可以忽略不計,但每個線上索引操作的臨時磁碟空間可能存在差異:

聯機索引操作使用行版本控制將索引操作與其他事務所做修改的影響隔離開來。這避免了在已讀取的行上請求共享鎖的需要。聯機索引操作期間的並髮使用者更新和刪除操作需要 tempdb 中的版本記錄空間。

因此,在操作期間會導致磁碟空間成本的最大因素之一ONLINE是索引中的欄位是否有並發數據更改。在一個事務性很強的數據庫上,您可能會注意到磁碟空間成本的差異,但通常我認為這不值得擔心。

這使得潛在的大小差異會根據索引操作期間表的寫入量而變化,因此無法在執行索引操作之前主動計算。

其他相關產品文件:

引用自:https://dba.stackexchange.com/questions/313384