0

アイテムの更新のデータベーステーブルがあります(item_id, updated_time, key, value)。各アイテムが何回更新されているのか知りたいのですが。私の現在のクエリは次のとおりです。

SELECT item_id, count(*)
FROM (SELECT DISTINCT item_id, updated_time FROM updates)
GROUP BY item_id;

問題は、これが非常に遅く実行されることです。私のテーブルには2451個のアイテムと約800万個の更新があり、データベースは現在1日しかカバーしていません。、、にインデックスがitem_idありupdated_timeます(item_id, updated_time)

このクエリをsqliteでより高速に実行できますか?「ライト」ではないものに移行することは役に立ちますか?

4

1 に答える 1

0

サブクエリは、外部クエリでのインデックスの最適化を防ぎます。次のような単一のクエリを使用します。

SELECT item_id,
       count(DISTINCT updated_time)
FROM updates
GROUP BY item_id

十分に新しいSQLiteバージョンでは、これはカバーインデックスから実行されます(で確認してくださいEXPLAIN QUERY PLAN)。

于 2012-12-22T13:06:34.437 に答える