【发布时间】:2013-11-03 23:59:38
【问题描述】:
数据库
我有一个标准化的 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 ... requires each session to issue its own CREATE TEMPORARY TABLE command for each temporary table to be used. 如果我可以让两个 PHP 文件连接到同一个数据库会话,那么它们应该都能看到临时表。
知道如何做到这一点吗? ...或者可能是我尚未考虑的不同方法?
【问题讨论】:
标签: php jquery ajax postgresql postgresql-9.1