グローバル一時テーブルを使用して、高価な中間データを保存したいと考えています。データは一時的なものですが、php セッションの期間中は適切であるため、グローバル一時テーブルを使用on commit preserve rows
するのが理想的です。
しかし..グローバル一時テーブルデータは、それを作成したOracleセッションでのみ利用できるようです。
したがって、これにより、oci_pconnect が同じ Oracle セッションを確実に取得できるようにするにはどうすればよいかという問題が生じます。Oracle セッションは永続的な接続ごとに一意であると読んだことがあります。複数のphp実行でトランザクションを使用することには興味がありません。一時テーブルだけです。
Oracleセッションを選択するための識別子として使用できるように、phpセッションを使用しています。
これまでのところ、これは不可能のようですが、質問しても問題ありません。
EDIT : これを実装する目的は、アクセス制御で使用されるユーザー グループ メンバーシップ情報へのアクセスを高速化することです。
事前にグループ メンバーシップを解析し、代わりにこの一時データを使用すると、後続のすべてのクエリで 3 つ以上の結合レイヤーが不要になります。返されたキーはRAW
であるため、それらを外部ストレージにシリアル化すると、HEXTORAW()
再度使用時に多くの呼び出しが発生し、意図した目的には役立たないようです。
グループ レベルのアクセスを決定するために追加されたクエリの部分は、セッションの間静的であり、単独で実行されると、約 600 行の一意の 16 バイトRAW
キーが返されます。次に、これらのキーは、リンク テーブルを介して結果セットに対して結合され、ユーザーが結果セットに対して「グループ レベル」の権限を持っているかどうかが判断されます。
IN を使用してキーを文字列として渡してみましたが、それらは RAW キーであるため、HEXTORAW()
クエリごとに 600 回呼び出す必要があります。パフォーマンスは、一時テーブルを使用してJOIN
.
「永続的な」中間結果に書き込む以外に、クエリのその部分の結果をキャッシュしておくようにOracleに指示する他の方法はありますか?