从PHP/AJAX访问PostgreSQL 9.1临时表 数据库

从PHP/AJAX访问PostgreSQL 9.1临时表 数据库,php,jquery,ajax,postgresql,postgresql-9.1,Php,Jquery,Ajax,Postgresql,Postgresql 9.1,我有一个规范化的Postgres9.1数据库,我在其中编写了一些函数。特别是一个函数“fn_SuperQuery”(param,param,…)返回记录集,应将其视为一个视图(接受参数)。此函数有很多开销,因为它在计算自己的结果时实际上创建了几个临时表,以便在处理大数据集时获得性能 另一方面,我曾经专门为这个查询使用WITH(cte),但我需要能够在某些列上添加索引,以实现更高效的联接 PHP 我严格使用PHP连接到数据库,运行查询,并将结果作为JSON返回。每个查询都以连接字符串开始,然后通过

我有一个规范化的Postgres9.1数据库,我在其中编写了一些函数。特别是一个函数“fn_SuperQuery”(param,param,…)返回
记录集
,应将其视为一个视图(接受参数)。此函数有很多开销,因为它在计算自己的结果时实际上创建了几个临时表,以便在处理大数据集时获得性能

另一方面,我曾经专门为这个查询使用
WITH
(cte),但我需要能够在某些列上添加索引,以实现更高效的联接

PHP 我严格使用PHP连接到数据库,运行查询,并将结果作为JSON返回。每个查询都以连接字符串开始,然后通过调用
pg\u close
结束

前端 我使用jQuery的
.ajax
函数调用PHP文件并接受结果


我的问题是: <代码>“fnUnQualQuy”(PARAM,PARAM,…)实际上是其他几个查询的基础。此应用程序的某些部分需要同时运行多个查询,以便为最终用户生成所有必要的信息。许多查询依赖于“fn_SuperQuery”(param,param,…)的输出运行此查询的开销相当大,如果给定相同的参数,它将返回相同的数据,这一事实让我认为让用户等待它运行两次是愚蠢的

我要做的是将
“fn_SuperQuery”(param,param,…)
的结果返回到一个临时表中,然后运行需要其数据的其他查询,然后丢弃临时表

我知道,如果我可以让两个PHP文件连接到同一个数据库会话,那么它们都应该能够看到临时表


有什么办法吗。。。或者也许我还有一个不同的方法需要考虑?<>强>

可以更好地使用正常的表吗?这没有多大区别。您可以使用
未标记的
表来加快速度


在9.3中,更好的选择可能是使用物化视图。

临时表是会话专用的。如果您想在不同会话之间共享,请使用普通表(可能是未标记的)

如果您担心非规范化,那么我要做的第一件事就是存储这些临时正常表;-)在一个单独的模式中。这允许您将非规范化(和工作集数据)的数据保持分离,以便进行分析等,并避免使用非规范化的表污染数据集的其余部分


或者,你可以看看其他方法的非规范化短。例如,如果数据在一段时间后不会更改,您可以定期为不可更改的数据放置摘要条目。这不是非规范化,因为它允许您在需要继续打开某些形式的报告时清除旧的详细记录。

将其放在“正常”表中是非规范化,而不是选项。我将研究物化视图;然而,我暂时只限于9.1版本,我的意思是创建新表,使用它,删除它。比如临时桌子。