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

Postgres-これはブール列に部分インデックスを作成する正しい方法ですか?

    インデックスが期待どおりに機能することを確認しました。

    ランダムデータを再作成しましたが、今回はdiet_glutenfreeを設定しました random() > 0.9へ したがって、onの可能性はわずか10%です。 ビット。

    次に、インデックスを再作成して、クエリを再試行しました。

    SELECT RecipeId from RecipeMetadata where diet_glutenfree;
    

    返品:

    'Index Scan using idx_recipemetadata_glutenfree on recipemetadata  (cost=0.00..135.15 rows=1030 width=16)'
    '  Index Cond: (diet_glutenfree = true)'
    

    そして:

    SELECT RecipeId from RecipeMetadata where NOT diet_glutenfree;
    

    返品:

    'Seq Scan on recipemetadata  (cost=0.00..214.26 rows=8996 width=16)'
    '  Filter: (NOT diet_glutenfree)'
    

    とにかく行の半分以上をロードする必要がある場合、PGはインデックスにヒットするよりもテーブル全体をスキャンする方が速いと推定しているため、私の最初の試みは汚染されたようです。

    ただし、列の完全なインデックスでこれらの正確な結果が得られると思います。部分インデックスでインデックス付けされた行数を確認する方法はありますか?

    更新

    インデックスは約40kです。同じ列の完全なインデックスを作成しましたが、それは200kを超えているため、間違いなく部分的であるように見えます。



    1. 非IEブラウザと同等のonbeforeprint()およびonafterprint()

    2. MYSQLのWHERECLAUSEのケース

    3. Oracleの一括収集に相当するSQLServer

    4. MySQLの各行を個別のDIVに表示します