簡體   English   中英

SQLite更新查詢優化

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM