[英]SQLite update query optimisation
我的部分功能要求更新每行中的值(僅在用戶選擇特定設置時才會發生)。
麻煩的是,查詢要花好幾分鍾才能執行(最多),並且只有269條測試記錄。 有什么辦法可以優化嗎?
String allRecords = "SELECT id, weight FROM Workout_Entry";
Cursor cursor = db.rawQuery(allRecords, null);
int rows = cursor.getCount();
int id;
double weight;
try
{
if (cursor.moveToFirst())
{
do
{
for (int i = 0; i < rows; i++)
{
id = cursor.getInt(0);
weight = cursor.getInt(1) / 2.2;
String strFilter = "id = " + id;
ContentValues args = new ContentValues();
args.put("weight", weight);
db.update("Workout_Entry", args, strFilter, null);
}
} while (cursor.moveToNext());
}
} finally
{
cursor.close();
}
(db).close();
謝謝!
只需將工作推送到數據庫引擎,而不是一次將數據拉出一行並每次觸發一個新的更新查詢。 用以下代碼替換您的代碼:
db.execSQL("UPDATE Workout_Entry SET weight=weight/2.2");
另外,由於這似乎是某種公制/英制單位轉換,所以請考慮將數據僅保留一種格式在數據庫中,然后將其轉換/格式化為適當的單位以用於顯示。
您應該學習使用交易-您可以在本演示中看到使用交易的示例。
還顯示了不使用事務的影響。
好的,我已經意識到我的錯誤。 我對每個記錄都有一個do while
循環,並且在其中是一個for loop
,該循環循環了x
次,其中x
是現有記錄的數量。
因此它經歷了O(n)²
次而不是O(n)
。
感謝那些回答! 我發現您的評論都很有用。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.