【发布时间】:2012-05-19 03:22:48
【问题描述】:
我想使用全局临时表来存储一些昂贵的中间数据。数据是暂时的,但在 php 会话期间是好的,因此使用带有on commit preserve rows 的全局临时表似乎是理想的。
但是.. 看起来全局临时表数据只对创建它的 oracle 会话可用。
所以这引发了一个问题,即我如何确保 oci_pconnect 能够返回相同的 oracle 会话,因为我已经读到每个持久连接的 oracle 会话都是唯一的?我对跨多个 php 执行使用事务不感兴趣,只是临时表。
我正在使用 php 会话,因此可以将其用作选择 oracle 会话的标识符。
到目前为止,这似乎是不可能的,但问一下也无妨。
编辑:
实现此功能的预期目的是加快对我的访问控制中使用的用户组成员信息的访问速度。
提前解析组成员资格并使用此临时数据代替在所有后续查询中消除了 3 层以上的连接。
由于返回的键是 RAW,将它们序列化到外部存储会导致多次调用 HEXTORAW() 再次使用,并且似乎对预期目的没有帮助。
为确定组级访问权限而添加的查询部分在会话期间是静态的,并且自行运行会返回大约 600 行唯一的 16 字节 RAW 键。然后通过链接表将这些键与结果集连接起来,以确定用户是否对结果集具有任何“组级别”权限。
我玩过使用 IN 并将键作为字符串传递,但由于它们是 RAW 键,因此我必须每次查询调用 HEXTORAW() 600 次。性能不如使用临时表和执行JOIN 好。
有没有其他方法可以告诉 Oracle 将查询的那部分结果缓存起来,而不是将它们写入“永久”中间结果?
【问题讨论】:
标签: php oracle session persistent-connection