我想知道如何使用等同於:優化在asp.net應用程序中informix存儲過程的性能?
SET ARITHABORT ON
和
WITH RECOMPILE option
Informix中的存儲過程?
我想知道如何使用等同於:優化在asp.net應用程序中informix存儲過程的性能?
SET ARITHABORT ON
和
WITH RECOMPILE option
Informix中的存儲過程?
SET ARITHABORT ON
SQL服務器手冊說:終止時的溢出或 除以零誤差查詢執行過程中發生的查詢。
在Informix中,默認情況下,在執行任何UDR/SP(過程或函數)期間發生的任何錯誤都將觸發異常,並且會在用戶會話級別自動產生。這將包括任何算術錯誤。
你能生產特別許可證書裏面做的是相反的,包括處理不允許這種例外達到用戶會話的範圍。 對於這種閱讀ON EXCEPTION
WITH RECOMPILE option
Sql Server的手冊說:創建一個存儲過程,指定 在其定義WITH RECOMPILE選項表示SQL Server 不緩存一個計劃,這個存儲過程;每次執行存儲過程 時都會重新編譯。當存儲過程採取的參數,其值不同廣泛 存儲過程的執行之間,從而導致不同 執行計劃每次要創建使用WITH重新編譯選項 。使用此選項是 少見,導致存儲過程來得更慢執行, 因爲存儲過程必須在每次執行 時間進行重新編譯。
在Informix的類似解決方案運行:update statistics for procedure <your_proc>;
在Informix Manual here
+1檢查說明:您ARITHABORT的分析是好的。在Informix中並沒有真正與WITH RECOMPILE類似的東西。如果你在過程中使用臨時表,那麼每次都會重新優化,但這是實現的副產品而不是設計功能。 –
嗨@Jonathan,尋找手工此信息,我沒有發現任何有關UDR +臨時表=自動重新優化。請問,您對「實施副產品」意味着什麼? – ceinmart
它通常被視爲......嗯,稱這是一個錯誤可能是太強大了,但稱這是一個不能完全副產品的該臨時表在SPL處理,而不是非常理想的方式不可取,是相當準確的。這可能是爲什麼它沒有記錄。在存儲過程中創建(和刪除)一個臨時表以實現WITH RECOMPILE並不是一種很好的編碼風格,儘管它可能有效。這也會限制你可以使用存儲過程的地方。您也需要考慮代碼中的異常處理。 –