序列是一個對象,作用類似於數據庫表的自增列性質,用於獲取序列值。它的特點是:
1、不與特定表相關聯,只能在INSERT語句通過調用NEXT VALUE FOR 函數來獲取新的序列值
2、全局性
3、調用sp_sequence_get_range一次性獲取一個序列範圍(多個序列值)
4、可以升序或降序生成
5、可以定義最大值、最小值和數值間隔,超過最大值可以決定要不要從最小值開始循環
6、最重要一點,可以緩存,這點對於繁忙的應用程序太重要了。緩存序列值範圍到內存,減少對磁盤IO的頻繁訪問。CACHE選項指定了緩存中緩存的序列數值多少個。緩存的情況下如果發生斷電或者重啓,緩存中的序列將丟失,重啓後從下一個沒有緩存的序列開始重新進入緩存。
緩存 vs 沒有緩存
沒有啓用緩存的情況下,請求下一個序列值時:
1、計算下一個序列值。
2、將序列對象的新當前值寫入系統表。
2、將計算的值返回給調用語句。
啓用緩存的情況下,請求下一個序列值時:
1、計算下一個序列值
2、在內存中更新該序列對象的新當前值
3、將計算的值返回給調用語句
緩存用完時:
1、計算序列對象的下一個值。
2、計算新緩存的最後一個值。
3、鎖定序列對象的系統錶行,新緩存的最後一個值寫入系統 表。
參考: