数据库
我有一个标准化的 Postgres 9.1 数据库,并在其中编写了一些函数。特别是一个函数"fn_SuperQuery"(param,param, ...)"
返回SET OF RECORD
并且应该被认为是一个视图(接受参数)。这个函数有很多开销,因为它实际上在计算自己的结果时创建了几个临时表,以便获得大型数据集的性能。
附带说明一下,我曾经WITH
专门将 (cte's) 用于此查询,但我需要能够在某些列上添加索引以实现更有效的连接。
PHP
我严格使用 PHP 连接到数据库、运行查询并以 JSON 形式返回结果。每个查询都以连接字符串开始,然后以对pg_close
.
前端
我正在使用 jQuery 的.ajax
函数来调用 PHP 文件并接受结果。
我的问题是这样的:
"fn_SuperQuery"(param,param, ...)"
实际上是其他几个查询的基础。该应用程序的某些部分需要一次运行多个查询来为最终用户生成所有必要的信息。其中许多查询依赖"fn_SuperQuery"(param,param, ...)"
于运行此查询的开销非常大的输出,而且如果给定相同的参数,它将返回相同的数据,这让我认为让用户等待它运行两次是愚蠢的.
我想要做的是将结果返回"fn_SuperQuery"(param,param, ...)"
到临时表中,然后运行需要其数据的其他查询,然后丢弃临时表。
我了解PostgreSQL ... 要求每个会话为要使用的每个临时表发出自己的 CREATE TEMPORARY TABLE 命令。如果我可以让两个 PHP 文件连接到同一个数据库会话,那么它们都应该能够看到临时表。
关于如何做到这一点的任何想法?...或者也许我还没有考虑另一种方法?