sql >> データベース >  >> RDS >> PostgreSQL

Postgresql-enable_nestloop =falseを使用すると、クエリの実行速度が大幅に向上します。プランナーが正しいことをしていないのはなぜですか?

    クエリプランナーが次善のクエリプランを選択した場合、処理する情報が不完全または誤解を招く可能性があります。

    このPostgreSQLWikiページ を参照してください。 サーバーのチューニングについて。特にrandom_page_costの章に注意してください およびdefault_statistics_target
    また、統計に関するマニュアルの対応する章もお読みください。プランナーが使用 およびプランナーのコスト定数 。

    具体的には、statistics targetを増やすと役立つ場合があります 次の列の場合:

    ALTER TABLE postgres.products ALTER COLUMN id SET STATISTICS 1000;
    ALTER TABLE postgres.sales_orders ALTER COLUMN retailer_id SET STATISTICS 1000;
    ALTER TABLE postgres.sales_orders ALTER COLUMN company_id SET STATISTICS 1000;
    
    ALTER TABLE goods_return_notes ALTER COLUMN retailer_id SET STATISTICS 1000;
    ALTER TABLE goods_return_notes ALTER COLUMN company_id SET STATISTICS 1000;
    
    ALTER TABLE retailer_category_leaf_nodes ALTER COLUMN tree_left SET STATISTICS 1000;
    ALTER TABLE channels ALTER COLUMN principal_id SET STATISTICS 1000;
    

    これらはフィルターに含まれ、

    になります

    もっとあります 。プレーナーが見積もりから大きく外れているすべての列を確認してください。デフォルトは100です。>>1000行のテーブルにのみ意味があります。設定を試してください。 ANALYZEを実行します 変更を有効にするために、後でテーブルに表示します。

    部分インデックスの作成にも役立つ場合があります postgres(sales_orders.retailer_id) WHERE retailer_id IS NOT NULL (一般的なNULL値の程度によって異なります)。

    あなたを助けるかもしれないもう一つのことはアップグレードすることです 最新バージョン9.1に。この分野では多くの大幅な改善がありました。



    1. データベースからdjangoモデルを生成することは可能ですか?

    2. 特定の文字で始まるレコードをカウントする

    3. MySQLでユーザーごとに最大3つのアイテムを選択するにはどうすればよいですか?

    4. MySQLフェイルオーバーを使用したHibernateWebアプリケーション