我在 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 子句。
任何建议如何从“配置”视图模拟路径列上的索引?