1

ループで実行される 1 つのクエリで特定の種類のドキュメントをすべてカウントする plpgsql 関数を高速化する方法はありますか? すべてを 1 つのクエリで?

validador := (select count(id_doc) from webdte.doc_tip_cifra
              where id_doc = id_documento and id_tipo_cifra = 901); 

validador2 := (select count(id_doc) from webdte.doc_tip_cifra
               where id_doc = id_documento and id_tipo_cifra = 902); 

validador3 := (select count(id_doc) from webdte.doc_tip_cifra
               where id_doc = id_documento and id_tipo_cifra = 905); 

validador4 := (select count(id_doc) from webdte.doc_tip_cifra
               where id_doc = id_documento and id_tipo_cifra = 907); 
4

1 に答える 1

3

1 つのクエリで 4 つの変数すべてを割り当てる方が高速です (1 つのテーブルまたはインデックス スキャンのみ)。

SELECT INTO validador, validador2, validador3, validador4
            sum(CASE id_tipo_cifra WHEN 901 THEN 1 ELSE 0 END)
           ,sum(CASE id_tipo_cifra WHEN 902 THEN 1 ELSE 0 END)
           ,sum(CASE id_tipo_cifra WHEN 905 THEN 1 ELSE 0 END)
           ,sum(CASE id_tipo_cifra WHEN 907 THEN 1 ELSE 0 END)
FROM   webdte.doc_tip_cifra
WHERE  id_doc = id_documento;

同じ結果です。

通常は追加でチェックする必要がありますが、オンのid_doc条件があるため、オンにすることはできません。NULLWHERE=NULL

于 2012-07-23T13:20:49.813 に答える