管道函數的我有一個像性能差在SQL Developer中
FUNCTION FOO
(
<PARAMETERS_LIST>
) RETURN T_TAB PIPELINED
AS
BEGIN
FOR rec IN
(<A LITTLE BIT COMPLEX QUERY WITH PARAMETERS_LIST>)
LOOP
PIPE row(T_WF(<COLUMN_LIST>));
END LOOP;
RETURN;
END FOO;
流水線表函數我通過select * from TABLE(FOO(<PARAMETERS_LIST>)) WHERE ROWNUM <= 200
測試在SQL Developer中查詢。 SQL Developer需要9秒才能返回數據。
儘管直接在SQL Developer中運行<A LITTLE BIT COMPLEX QUERY WITH PARAMETERS_LIST>
需要0.9秒的時間。
爲什麼流水線功能很慢?
查詢找到多少行 - 使用普通查詢是否需要0.9秒才能返回所有行或結果的第一頁,還是200行?當你直接運行時,你有沒有rownum限制?如果是這樣,可能會針對計數器進行優化,但這不會在遊標版本中發生,因爲該函數並不知道您在此時限制了結果。顯示直接運行的執行計劃可能會揭示某些事情;如果您將其限制爲200行,則顯示沒有此限制的執行計劃。 – 2015-03-19 12:56:28
SQL開發人員首先顯示50行簡單查詢。我們還將rownum <= 50添加到普通查詢和select * from TABLE(FOO())WHERE ROWNUM <= 50',性能結果相同。接下來我將分析執行計劃。 –
comphilip
2015-03-20 06:07:39