本番用と QA 用に 2 台の RDS サーバーを使用しています。
本番データベースをダンプし、QA データベースにインポートしました。
まったく同じデータであり、ほぼ同じハードウェアであるため、クエリが同様に実行されることを期待していました。ただし、インポートされた (QA) db は、インデックスではなくほとんどのクエリに対してシーケンシャル スキャンを使用して、動作がおかしいようです (運用サーバーが行うように)。
インデックスを再構築しようとしましたが、無駄に、postgresql プランナーはインデックス スキャンではなく seq スキャンの使用を主張します。
seq スキャンを使用すると結論付けられる sql は次のようになります。
SELECT "emails".* FROM "emails" WHERE "emails"."emailable_type" = 'Type1' AND "emails"."emailable_id" IN (4410398, {many others},137191)
現在、postgresql にはヒントがないため、インデックスがうまく機能しているかどうかを確認できません。問題は、postgresql オプティマイザが実稼働データベースで 1 つの説明計画を作成し、インポートされた QA データベースで別の説明計画を作成する理由は何ですか?