SQLite 使用AUTOINCREMENT帶來的利弊

來源:互聯網
上載者:User

標籤:ar   使用   sp   資料   bs   as   演算法   nbsp   資料庫   

  在項目使用中我們常常需要一個自動成長的主鍵,比如加上AUTOINCREMENT約束使一個主鍵在每次插入資料時增長。由於一般而言你建立一個表會預設有一個成為ROWID的欄位(除非聲明為 without rowid),所以你添加的integer primary key其實就是rowid的別名而已,但是如果你加了autoincrement的約束以後,資料庫引擎產生rowid的演算法會發生相應的改變。

他們的產生演算法如下

  integer primary key:

        擷取當前column最大的值,如果沒有達到64位有符號整數最大值,那麼就在最大值的基礎上+1作為新值 ,如果已經達到了最大值,那麼就重新隨機尋找一個未使用的,就是你刪除一行的時候未用的那個值。如果真的已經沒有可以插入了,那麼就返回SQLITE_FULL錯誤。

 integer primary key autoincrement:

      擷取當前column最大值,如果沒達到最大值,增1插入,否則返回SQLITE_FULL。

integer primary key預設也是會自動增加的,使用autoincrement能夠保證新插入的資料一定會比以前的大,但是也帶來了許多額外的消耗,會消耗額外的CPU,磁碟空間,還有I/O磁碟操作帶來的開銷。官網給出的建議是:如果沒有嚴格的需要它應當被避免使用,通常它不是必要的。


  下面是我測試的一些資料:

insert操作關閉事物處理100W資料 not autoincrement 74.7088160515 s100W資料 autoincrement  91.2676999569 s開啟事物處理100W資料 not autoincrement 69.6123759747 s100W資料 autoincrement 86.1955218315 s




SQLite 使用AUTOINCREMENT帶來的利弊

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.