答えはノーだと思いますが、Postgres では、クエリ全体を実行するよりも高速に返される結果の数を見つける方法はありますか? つまり、非常に長い時間がかかるクエリがある場合、返される行数だけを知りたい場合は、より速く実行できますか?
4 に答える
目的の改善の規模が得られるかどうかはわかりませんが、結果セットをクライアントに返す必要がないため、クエリselect count()
よりも常に高速になります。select some fields
ただし、サーバーは選択プロセス全体を実行する必要があるため、操作の一部はまったく同じ時間で実行されます。count()
つまり、クエリがより複雑な場合、または結果セットが非常に短い場合、勝つ時間は減少します。
これが理にかなっているといいのですが...
一方、クエリの実行時間が心配な場合は、最初に停止するのは常にEXPLAINである必要があります(ここで説明するように、 pgAdminIIIでは非常に視覚的な形式でも利用できます) 。
count()
正確ですが、行がまだ生きていることを確認する必要があるため、遅いことで有名です。例外は、PostgreSQL 9.2 の新しいインデックスのみのスキャンです - 最適な条件下で、適切なインデックスが利用可能な場合です。
クエリがテーブルからすべての行を取得し
、統計が最新
であり、結果が 100% 正確である必要がない場合 (最後の からの変更)ANALYZE
、はるかに高速なショートカットがあります。
SELECT reltuples::bigint AS estimate
FROM pg_class
WHERE oid = 'myschema.mytable'::regclass;
この関連する回答の詳細:
それ以外の場合count(*)
は、最善の策です。SELECT
他のすべてのアイテムとを削除することを忘れないでくださいORDER BY
。
count()
関数を見てみましょう: http://www.postgresql.org/docs/8.2/static/functions-aggregate.html
はい、SELECT [一連のフィールド] の代わりに SELECT COUNT(*) を使用してください。