customer_list
私のユースケースは、顧客の請求書と、一般化されたコードテーブルに結合してフォーマットコードを計算するテーブルへの結合によって見つかった各請求書のフォーマットコードを取得することです。
クエリの簡略化されたバージョンが続きます。これは正常に機能していますが、サブクエリは約 5k 行を返します。サブクエリにそれほど多くの行が含まれないように、これを最適化する方法を考えなければなりません。
select i.invoice_number,
f.format_code
from invoices i
left join (
select gc.code_1 as format_code,
ls.account
from gen_codes gc,
customer_list ls
where gc.code_name = 'invoice-format'
and gc.code_1 <> ''
and ls.list_type = gc.code_value
) f on account = i.account
or account = i.billing_account
where i.account = :accountNumber
注: すべての請求書にフォーマット コードがあるわけではありません。
UPDATE : 内部選択を使用しない同様のクエリは、次の形式になります。
select i.invoice_number,
f.code_1 as format_code
from invoices i
left join customer_list ls on
(account = i.account or account = i.billing_account) and ls.list_type in (
select code_value
from gen_codes
where code_name = 'invoice-format'
and code_1 <> ''
)
left join gen_codes f on code_value = ls.list_type
and code_name = 'invoice-format'
and code_1 <> ''
この後者のバージョンは、最初のバージョンに一致する〜5kのレコードが含まれgen_codes
ているのに対し、一致したクエリには2ダースのレコードしかないため、より効率的であると感じています。customer_list