多対 1 の関係を持つ 2 つのテーブルがあります。(オラクル)
**Table: PARENT**
Field: A (PK)
Field: B
Field: C1
Field: C2
Field: C3
Field: C4
Field: C5
**Table CHILD**
Field: A (PK) (FK to PARENT.A)
Field: D (PK)
Field: E
子テーブルと親テーブルに挿入されたレコードは同時に挿入されます。
私が疑問に思っているのは、これを行う最も効率的な方法は何ですか。
現在、この挿入ステップ全体で呼び出し側アプリケーションによって呼び出されるストアド プロシージャが 1 つあります。ストアド プロシージャには現在、次のシグネチャがあります。
Field: A
Field: B
Field: C (dilimited string)
Field: D (dilimited string)
Field: E (dilimited string)
このプロシージャは、入力から C をループし、各値を配列に格納します。次に、その配列を入力からの A および B と共に使用して、表 PARENT に挿入します。
次に、入力から A を使用し、入力から D と E をループして、区切り文字列の各項目に対してテーブル CHILD に挿入します。
これは、1 日あたり最大 300 万回呼び出されます。可能な限り効率的である必要があります。
1 つだけではなく複数の SP 呼び出しを行うと、どの程度効率が失われますか?
制限された文字列を処理するためのすべてのループは、大変な作業のように思えます。
呼び出し元のアプリケーションは、CHILD へのエントリごとに個別の SP 呼び出しを行うことができると考えていました。ただし、どのようにして CHILD への挿入が PARENT への挿入の前に行われないようにするにはどうすればよいですか? (多くの場合、挿入する子レコードはありません。ある場合、通常は 10 未満ですが、50 にもなる可能性があります)
また、dilimted 文字列 C で情報を取得する別の方法も開きます。
分割された文字列から情報を取得するために while ループよりも効率的なものはありますか?
私は SP を書きませんでした。小さな変更を加えて、可能であればより効率的にするように依頼されました。
何か案は?
ノート:
テーブルを単純化しました。実際には、拡張された文字列 C には 5 ではなく 10 の項目があり、テーブル PARENT に挿入される C のような拡張された文字列がさらに 2 つあります。テーブルには、示されている以外にもいくつかのフィールドがあります
記録は 30 日後に削除されます。