2012-09-12 48 views
1

我想知道是否有人可以解釋爲什麼在事務內部的android平臺上運行sql要快得多。比如一些代碼,如:Android sql事務性能

SQLiteDatabase db = dbHelperExt.getWritableDatabase(); 
db.beginTransaction(); 
try { 
    ... // some sql inserting/updating/deleting 
    db.setTransactionSuccessful(); 
} finally { 
    db.endTransaction(); 
} 

與刀片幾百打交道時,我的速度增長一直快的時間倍數,我主要是好奇,這是爲什麼。另外,在處理php/myqsl時,我還沒有注意到同樣的增長,這是怎麼回事?

+0

我不確定,但我會願意打賭,它優化了sql命令,以便每個事務調用使用較少的代碼 –

回答

2

無論何時您對SQLiteDatabase執行操作,都會默認打開一個事務,該事務負責打開文件,獲取數據庫對象,執行請求並釋放對文件的訪問。另外,你可能注意到,第一個動作對系統來說更重。 如果您沒有合併同一時間在獨特交易中執行的不同操作,則會爲每個操作創建一個操作(即:10個操作=每個操作都包含10個交易)。

當您對所有人使用1次交易時,只執行一次95%的較重操作。 唯一的缺點可能是,如果你的一個請求失敗,其餘的將被取消。但對我來說,這實際上是一個優勢。

編輯:Here您有進一步的詳細信息。

+0

感謝您的鏈接。我沒有對android的時差進行基準測試,但是插入/更新的眼球記錄速度非常快,可能接近95%的速度,因爲這樣會更有意義。而且我同意「不好的一面」實際上是一件好事。 – Pzanno