2017-07-29 26 views
1

在SQLite的文檔,它包括以下內容: -在Android上使用AUTOINCREMENT for SQLite的開銷是多少?

AUTOINCREMENT關鍵字強加額外的CPU,內存,磁盤空間,並 磁盤I/O開銷,應該如果不嚴格需要避免。通常不需要 。

由AUTOINCREMENT關鍵字實施的行爲是巧妙地 從默認的行爲不同。使用AUTOINCREMENT時,自動選擇ROWID的行將保證具有 之前從未在同一個數據庫中使用過的ROWID。並且自動生成的ROWID保證單調增加 。這些在某些應用中是重要的屬性。 但是,如果您的應用程序不需要這些屬性,則應該使用默認行爲 ,因爲使用AUTOINCREMENT 需要在插入每行時執行額外的工作,因此 會導致INSERT運行速度稍慢。

以上報價均爲從SQLite Autoincrement

那麼,什麼樣的影響,可以預期的以及在多大程度上是AUTOINCREMENT慢一點?

回答

1

我的估計,注意到我不是一個統計學家,是開銷比較慢,比如8-12%

我使用結構上相似的和簡單具有兩個TEXT列,每運行每個表插入,上4臺設備重複該5次獲得的結果。

表1(Dflt列)僅由兩個TEXT列創建(因此使用默認的ROWID)。

表2(AI列)除了兩個TEXT列之外還使用_id INTEGER PRIMARY KEY AUTOINCREMENT創建。

表3(無AI列)除了兩個TEXT列外還使用_id INTEGER PRIMARY KEY創建。

所以表2使用稍微不同的ROWID選擇算法的插入。

使用的四個器件是: -

  • (1)一種Genymotion仿真設備(自定義平板 - 5.1。0 - API 22 - 最高1536x2048 )

  • (2)巖蛇10" 片劑(AT101-1116 )

  • (3)一種HTC 1 M8(HTC_0PKV1 )

  • (4- )甲Lenevo A10-30片劑(聯想TB2-X30F )

    我所獲得的結果: -

當一切都在僅有1交易(運行

enter image description here

的結果是更有利的即beginTransaction();任何插入,與setTransactionSuccessful();endTransaction();所有插入之後(之前爲所有表即整個150000個插入),例如: -

enter image description here

兩個表的對比,突出了好處,使用事務可以在性能。

相關問題