2012-04-24 4 views
1

SQLiteクエリを実行すると、返されるデータセットのサイズによってクエリの時間が影響を受けますか?この質問では、結果のデータに実際にアクセスしていないと仮定して、クエリ自体に時間がかかるかどうかを知りたいだけです。また、単にすべての行を選択し、WHERE句またはORDER BY句がないと仮定します。大きな結果セットを返すSQLiteクエリに時間がかかりますか?

たとえば、テーブルAとテーブルBの2つがある場合、テーブルAには100万行、テーブルBには10行があり、両方のテーブルには同じ数とタイプの列があるとします。テーブルAのすべての行を選択するのは、テーブルBのすべての行を選択するよりも時間がかかりますか?

これは私の質問How does a cursor refer to deleted rows?のフォローアップです。私は、クエリSQLiteの中にデータのコピーを作成すると、大規模なデータセットを返すクエリは、クエリの結果データをコピーするだけの最適化がない限り、dbのデータが変更されている場合は、クエリはまだ生きていますか?

答えて

0

いくつかの詳細によっては、クエリに異なる時間がかかることがあります。

例:私はいくつかの20kエントリを持つテーブルを持っています。私はLIMITを使ってすべての行を試しなければならないGLOB検索を行います。 LIMITが満たされると、クエリは早期に停止する可能性があります。そうでない場合は、テーブル全体(またはJOIN)を通過する必要があります。したがって、結果が多すぎる検索は、結果がほんのわずかな検索よりも早く戻ります。

クエリが同じ量のデータを実行する必要がある場合は、選択した行の量がより少なくても大きくても大きな違いはないと思います。もちろんIOコストがかかるでしょう。

+0

私は私の質問を明確にした、私は1つのテーブルからすべての行を選択する状況にのみ興味がある、WHERE、ORDER BY、LIMIT、またはJOIN句。 – satur9nine

+0

答えは同じです。テーブルAでより多くの行を実行するには時間がかかります。インデックスは、そのステップを離れるかもしれません。すべてを選択すると、IO(とオーバーヘッド)が許す限り早く行が出てくることが期待されます。同じレートでより多くのデータを取得するには時間がかかります。 – XTL