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

PostgreSQLクエリに適切なインデックスを選択する

    この特定の並べ替え順序で部分的な複数列のインデックスを作成します:

    CREATE INDEX products_status_sales_partial_idx ON products (status, sales DESC)
    WHERE  category NOT IN ('cat3','cat7');
    

    クエリを少し変更します:

    SELECT product_no, sales 
    FROM   products 
    WHERE  status = 'something'
    AND    category NOT IN ('cat3', 'cat7') 
    ORDER  BY status, sales DESC 
    LIMIT  3;
    

    statusを追加する ORDER BYの最初の要素として 条項は冗長で無意味に思えます。しかし、試してみてください。

    なぜですか?

    クエリプランナーは、

    を使用して理解するほど賢くはありません。
    WHERE  status = 'something' ...
    ORDER  BY sales DESC
    

    インデックスの並べ替え順序(status, sales DESC) 論理的帰結として一致します。したがって、すべてを読みます 行を修飾し、上位3つを並べ替えて選択します。

    statusを追加する ORDER BYへ クエリプランナーがインデックスから上位3つのエントリを直接読み取ることができるようにします。 数桁のスピードアップを期待してください 。

    PostgreSQL8.4および9.1でテスト済み。



    1. mysqlのパフォーマンス間のパフォーマンスは何ですか..?

    2. テーブルの追加を変更...`コード`の前に?

    3. Laravel5.1アップロードファイルのセキュリティ

    4. Oracle 10gの排他テーブル(読み取り)ロック?