DATABASE
我有一個規範化的Postgres 9.1數據庫,並在其中寫了一些函數。其中一個函數"fn_SuperQuery"(param,param, ...)"
返回SET OF RECORD
,應該被認爲是一個視圖(接受參數)。這個函數有很多開銷,因爲它實際上創建了幾個臨時表,同時計算它自己的結果以獲得大數據集的性能。從PHP/AJAX訪問PostgreSQL 9.1臨時表
附註中,我曾經使用WITH
(cte's)專門用於此查詢,但我需要能夠在某些列上添加索引以獲得更高效的聯接。
PHP
我使用PHP嚴格連接到數據庫,運行查詢,並將結果作爲JSON返回。每個查詢都以連接字符串開始,然後通過致電pg_close
完成。
FRONTEND
我使用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文件連接到同一個數據庫會話,然後他們都應該能夠看到臨時表。
如何做到這一點任何想法? ......或者也許我還沒有考慮一種不同的方法?
把它放在一個「正常」表中將是反規範化,而不是一個選項。我會研究物化視圖;然而,我暫時只限於9.1。 – losthorse
我的意思是創建新表,使用它,放下它。像臨時表。 – alexius