SQLite 使用AUTOINCREMENT帶來的利弊

  在項目使用中咱們經常須要一個自動增加的主鍵,好比加上AUTOINCREMENT約束使一個主鍵在每次插入數據時增加。因爲通常而言你創建一個表會默認有一個成爲ROWID的字段(除非聲明爲 without rowid),因此你添加的integer primary key其實就是rowid的別名而已,可是若是你加了autoincrement的約束之後,數據庫引擎生成rowid的算法會發生相應的改變。 算法

他們的生成算法以下 shell

  integer primary key: 數據庫

        獲取當前column最大的值,若是沒有達到64位有符號整數最大值,那麼就在最大值的基礎上+1做爲新值 ,若是已經達到了最大值,那麼就從新隨機尋找一個未使用的,就是你刪除一行的時候未用的那個值。若是真的已經沒有能夠插入了,那麼就返回SQLITE_FULL錯誤。 測試

 integer primary key autoincrement: code

      獲取當前column最大值,若是沒達到最大值,增1插入,不然返回SQLITE_FULL。 rem

integer primary key默認也是會自動增長的,使用autoincrement可以保證新插入的數據必定會比之前的大,可是也帶來了許多額外的消耗,會消耗額外的CPU,磁盤空間,還有I/O磁盤操做帶來的開銷。官網給出的建議是:若是沒有嚴格的須要它應當被避免使用,一般它不是必要的。 it


  下面是我測試的一些數據: class

insert操做
關閉事物處理
100W數據 not autoincrement 74.7088160515 s
100W數據 autoincrement  91.2676999569 s
開啓事物處理
100W數據 not autoincrement 69.6123759747 s
100W數據 autoincrement 86.1955218315 s
相關文章
相關標籤/搜索