Postgres 9.1 PL/pgSQL ストアド プロシージャを作成する必要があります。このストアド プロシージャは、他のパラメータとともに、データベース列の 1 つの値を直接参照する一連の値を取ります。私が知る限り、Postgres でこれを行う標準的な方法はarrayです。
もちろん、これはかなり基本的なタスクです。私の問題はスケーラビリティです。私のコードは基本的には機能しますが、渡されたシーケンスが大きくなると (数百または数千の値のように) パフォーマンスが低下します。
フォームの配列を使用して、ストアド プロシージャ内のかなり単純な SELECT ステートメントでも
SELECT <some columns>
FROM <some tables>
WHERE <some other select criteria>
AND <column with values selected by array parameter>
IN (SELECT * FROM unnest(<array parameter>))
データベースがまだそれほど大きくなく、配列に数十の値しかない場合でも、実行に数秒かかります。
私の最初の疑いはそれunnest(...)
が問題だったのですが、配列パラメーターで参照されている列を持つテーブルからのみ選択するのは非常に高速です。
SELECT <some columns>
FROM <table with column ref'd in array parameter>
WHERE <column with values selected by array parameter>
IN (SELECT * FROM unnest(<array parameter>))
数ミリ秒しかかかりません。
私の質問:
- 配列をパラメーターとして使用する代わりの方法はありますか?
- クエリのパフォーマンスを向上させるにはどうすればよいですか?