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

サブクエリのパフォーマンスが低いPostgreSQLIN演算子

    私はついに解決策を見つけたようです:

    select * 
      from view1 
      where view1.id = ANY(
                           (select array(select ext_id 
                                         from aggregate_table 
                                         order by somedata limit 10)
                           )::integer[]
                          ) 
      order by view1.somedata;
    

    @Dukelingのアイデアを詳しく説明した後:

    (1,2,3,4,5,6,7,8,9,10)のidは最適化でき、(select ...)のidは最適化できないのではないかと思いますが、その理由は(1,2 、3,4,5,6,7,8,9,10)は定数式ですが、selectはそうではありません。

    より高速なクエリプランでこれらを見つける

    Recheck Cond: (id = ANY ('{1,2,3,4,5,6,7,8,9,10}'::integer[]))
    Index Cond: (id = ANY ('{1,2,3,4,5,6,7,8,9,10}'::integer[]))
    

    これは、質問の最初のクエリよりもさらに高速で、約1.2ミリ秒で、現在は

    を使用しています。
    Recheck Cond: (id = ANY ($1))
    Index Cond: (id = ANY ($1))
    

    計画内のビットマップスキャン。



    1. SELECTDISTINCTAndroidSQLiteが機能しない

    2. テーブルの中央に新しい列を挿入しますか?

    3. 初心者向けのSQLINSERT

    4. 高可用性のためのMariaDBレプリケーションのデプロイ