1

約 2000 万行と 3 列のデータベースがあり、現時点ではインデックスなしでテストしています。私の選択ステートメントは次のようなものです:

SELECT * 
FROM   database 
WHERE  column COLLATE NOCASE IN ('expr1', 'expr2' .... up to 96 expressions)

すぐにcommand.ExecuteReader()戻ってきて、コレクションをすぐに読むことができます。しかし、Read()これ以上行を返さない最後のものは13秒かかります.これはなぜですか..? これはどうすれば改善できますか..?

using (SQLiteDataReader reader = command.ExecuteReader())
{
    if(reader.HasRows)
    {
        while (reader.Read())
        {
            // READING DB DATA
        }
    }
}

編集: HasRows をループの外に移動しました

4

1 に答える 1

1

SQLite はその場で結果レコードを計算します。

実際に一致する最後のレコードの後、データベースは残りのすべてのレコードの一致をチェックする必要があります。

インデックスを使用すると、検索が高速になります。
( EXPLAIN QUERY PLANを使用して、何らかのインデックスが使用されているかどうかを確認します。)

于 2013-09-17T07:03:08.650 に答える