Sql-Server
為什麼 Denali 序列應該比標識列表現更好?
在他對哪個更好:標識列或生成的唯一 id 值的回答中?mrdenny 說:
當 SQL Denali 出現時,它將支持比身份更有效的序列,但您無法自己創建更高效的東西。
我不確定。了解 Oracle 的序列後,我必須為插入創建觸發器,將每個插入封裝到儲存過程的呼叫中,或者祈禱我在執行臨時插入時不要忘記正確使用序列。
我懷疑序列的優勢是否如此明顯。
我也會在這裡回答。它與如何
IDENTITY
和SEQUENCE
工作的內部結構有關。使用
IDENTITY
,SQL Server 將值預記憶體到記憶體中,以便它們隨時可用。有關詳細資訊,請參閱Martin Smith 的答案。隨著值的使用,後台程序會生成更多值。正如您可以想像的那樣,這個池可以很快用完,使應用程序受制於生成值的後台程序。使用
SEQUENCE
,SQL Server 允許您定義記憶體的大小。雖然 SQL Server 實際上並沒有將值保留在記憶體中,它只保留目前值和頂端值,這將大大減少創建值所需的 IO 量。不要將記憶體設置得太高,因為這會減少可以使用的數字數量:如果 SQL Server 崩潰,則在目前記憶體範圍中指定的任何未使用的值都將失去。
至於行插入,只需為列指定一個預設值,如下所示:
DEFAULT (NEXT VALUE FOR Audit.EventCounter),