Oracle 9iに自己参照テーブルがあり、そこからデータを取得するビューがあります。
CREATE OR REPLACE VIEW config AS
SELECT c.node_id,
c.parent_node_id,
c.config_key,
c.config_value,
(SELECT c2.config_key
FROM vera.config_tab c2
WHERE c2.node_id = c.parent_node_id) AS parent_config_key,
sys_connect_by_path(config_key, '.') path,
sys_connect_by_path(config_key, '->') php_notation
FROM config_tab c
CONNECT BY c.parent_node_id = PRIOR c.node_id
START WITH c.parent_node_id IS NULL
ORDER BY LEVEL DESC
このテーブルには、PHPアプリケーションの構成が格納されています。ここで、Oracleビューで同じ構成を使用する必要があります。
パスごとにビューからいくつかの値を選択したいのですが、残念ながらこれには0.15秒かかるため、許容できないコストになります。
SELECT * FROM some_table
WHERE some_column IN (
SELECT config_value FROM config_tab WHERE path = 'a.path.to.config'
)
最初はsys_connect_by_pathの関数インデックスを考えましたが、CONNECT BY句も必要なため、不可能です。
'config'ビューからパス列のインデックスをエミュレートするにはどうすればよいですか?