Sybase identity 字段
http://ewoyaofei.blog.163.com/blog/static/343562612010314115446284/
1、identity
Oracle, DB2, pgSQL中都有sequence的概念,這個概念比Identity先進很多,在Sybase中沒有Sequence對象,與之相對應的是Identity
2、identity 的創建
identity跟sequence對象完成的功能類似,但是有一定的約束,每個table只能有一個identity的列,列的類型必須是numberic(n,0).
sql 代碼
3、identity gap的產生:
缺省情況下Sybase Adaptive Server會給identity字段分配一段數字到內存中,在磁盤上記錄被分派到內存中的最大的數值,
這樣就不用每次插入數據都需要寫磁盤來記錄當前identity的最大值,而是直接在內存中計算,以提高performance,默認分配到內存的
數值段是identity 字段最大值的 0.05%,這樣雖然提高了效率但是如果server fail或者no wait重起,那么內存中的數字段就會丟失,DB Server
會從記錄在磁盤上的identity最大值開始計算identity值,就會產生gap,如果按照默認值來計算,server fail 和no wait重起2000次,那么
identity字段就會溢出,必須增加identity字段的長度,其實這期間會有大量的gap
4、要點提示:
a:定義identity時要對數據量有個良好的估計,例如上面的代碼中identity的最大值時10的precision次冪-1,對于所有的identity都定義
numberic(18,0)是不合適的,不可能所有的表都有幾十萬億的數據量
b:定義identity時要對數據量的增長情況有個良好的估計,合理設置idnetity_gap的值,而不是默認的值
sql 代碼?
這個value值會覆蓋db 默認的是identity 字段最大值的 0.05%這個值。
?
在Sybase中使用
sp_chgattribute 'TableName', 'identity_gap', gap_value
來更改gap_value為一個合理的值
5、@@IDENTITY
可以使用 select @@IDENTITY 獲取 insert 之后的值
總結
以上是生活随笔為你收集整理的Sybase identity 字段的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: JavaScript prototype
- 下一篇: 数据仓库—数据仓库—Sybase IQ