我執行以下語句:爲什麼我會導致羣集索引更新?
UPDATE TOP(1) dbo.userAccountInfo
SET Flags = Flags | @AddValue
WHERE ID = @ID;
列 'ID' 是一個INT PRIMARY KEY與IDENTITY約束。 標誌是一個BIGINT不爲NULL。
執行路徑指示聚集索引更新正在發生。一個非常昂貴的操作。 除主鍵外,沒有包含標誌或ID的索引。 我覺得實際的執行路徑應該是:
聚集索引查找=>更新
我執行以下語句:爲什麼我會導致羣集索引更新?
UPDATE TOP(1) dbo.userAccountInfo
SET Flags = Flags | @AddValue
WHERE ID = @ID;
列 'ID' 是一個INT PRIMARY KEY與IDENTITY約束。 標誌是一個BIGINT不爲NULL。
執行路徑指示聚集索引更新正在發生。一個非常昂貴的操作。 除主鍵外,沒有包含標誌或ID的索引。 我覺得實際的執行路徑應該是:
聚集索引查找=>更新
表有兩種形式:聚集索引和堆。你有一個PRIMARY KEY約束,所以你已經隱含地創建了一個聚集索引。在製作這張而不是時,您必須增加額外的長度。 '表'的任何更新都是聚簇索引的更新,因爲聚簇索引是表。 至於聚集索引更新是一個'非常昂貴的操作',現在這是一個城市傳說,圍繞着關於數據庫如何工作的基本錯誤信息。正確的語句是'影響聚簇鍵的聚集索引更新必須更新所有非聚簇索引'。
聚集索引是物理表,所以每當你更新任何行,您要更新集羣指數。
你一定確定該索引既不聚集也不覆蓋該領域[標誌]? – 2009-05-22 00:06:53
查詢中的TOP(1)是什麼? – BradC 2009-05-22 00:10:37
@未知Google: 此表上只有一個非聚集idx。它既不影響ID也不影響標誌。 @ BradC: 在我的發言中有點冗長。 「這個陳述只會影響一個用戶。」但真的沒有任何目的。 – Kivin 2009-05-22 00:15:06