-2

User というテーブルがあり、列 uid、age などがあります。最初に \d+ User; を実行します。次に、以下の情報が表示されていることがわかります。

Indexes:
    "users_pkey" PRIMARY KEY, btree (uid)

だから私はuidがインデックスとして使われていることを知っています。それから私は使用します

SELECT COUNT(uid) FROM User;

インデックスの数を取得します。

しかし、もっと良い方法はありますか。たとえば、pg_class、pg_stats を使用できます...

4

2 に答える 2

0

まずuser、予約語です。識別子として使用しないでください。

「インデックスの数」とは、おそらく「行の数」を意味します。

テーブル内のすべての行をカウントする場合、テーブル自体よりもかなり小さい場合にのみインデックスが役立ちます(Postgres 9.2 でインデックスのみのスキャンを使用する場合)。

クエリ:

SELECT COUNT(uid) FROM tbl;

実際には、テーブル内で の null 以外の値がいくつuid見つかるかをカウントしますtbl。これは、たまたま、値のない列の (ライブ) 行の総数と一致しNULLます。実際に行を数えたい場合は、代わりに次を使用します。

SELECT COUNT(*) FROM tbl;

少し短く、より速く。

最後の ANALYZE の実行に基づく推定値で十分な場合は、システム カタログにクエリを実行できます。

SELECT reltuples FROM pg_class WHERE oid = 'my_schema.my_tbl'::regclass;

読み取る必要があるのは 1 行だけなので、明らかにはるかに高速です。行をカウントする方法については、カウントに関する Postgres Wikiを参照してください。

于 2013-11-05T22:05:18.480 に答える