私はPostgres 9..0のクエリプランを変更する方法について詳しくは探しています。Postgres 9.0のクエリプランを変更する
私は、クエリがあります。
SELECT
max(creation_date)
FROM
statistics_loged_users
WHERE
school_id = 338 and
group_id = 3 and
usr_id = 243431;
と出力を分析説明:
"Aggregate (cost=1518.56..1518.57 rows=1 width=8) (actual time=410.459..410.459 rows=1 loops=1)"
" -> Bitmap Heap Scan on statistics_loged_users (cost=993.96..1518.55 rows=1 width=8) (actual time=410.025..410.406 rows=210 loops=1)"
" Recheck Cond: ((group_id = 3) AND (usr_id = 243431))"
" Filter: (school_id = 338)"
" -> BitmapAnd (cost=993.96..993.96 rows=133 width=0) (actual time=409.521..409.521 rows=0 loops=1)"
" -> Bitmap Index Scan on statistics_loged_users_idx2 (cost=0.00..496.85 rows=26669 width=0) (actual time=375.770..375.770 rows=3050697 loops=1)"
" Index Cond: (group_id = 3)"
" -> Bitmap Index Scan on statistics_loged_users_idx (cost=0.00..496.85 rows=26669 width=0) (actual time=0.077..0.077 rows=210 loops=1)"
" Index Cond: (usr_id = 243431)"
"Total runtime: 411.419 ms"
我々は最初のフィルタはgroup_idのことであることがわかりますが。 このテーブルは非常に非常に大きい:) group_idは同じですが、同じusr_idを持つ行はずっと少ない行がたくさんあります。
質問最初のフィルタがusr_idでなければならないということは、どのようにクエリプランに伝えることができますか。
私はgroup_idの上のインデックスとusr_idを作成し、私はパフォーマンスを持って、 私はクエリプランを変更する方法を知っておく必要があり、それは将来のためにあります:)
推定行26,669、実際3,050,697。私は '真空分析'が順調だと思う。定期的にやっていますか? –