PostgreSQLOracle相容性之-PL/SQLDETERMINISTIC與PG函式穩定性(immutable,stable,volatile)
標籤
PostgreSQL , Oracle , 函式穩定性 , stable , immutable , volatile , DETERMINISTIC
背景
Oracle建立pl/sql函式時,有一個引數DETERMINISTIC,含義時只要輸入的引數一樣,返回的結果一定一樣。
DETERMINISTIC Clause
Specify DETERMINISTIC to indicate that the function returns
the same result value whenever it is called with the same values for its arguments.
CREATE OR REPLACE FUNCTION text_length(a CLOB)
RETURN NUMBER DETERMINISTIC IS
BEGIN
RETURN DBMS_LOB.GETLENGTH(a);
END;
在PostgreSQL中,稱之為函式的穩定性引數
在PG中,函式穩定性分為三檔:
immutable,超級穩定,任何時候呼叫,只要函式的引數不變結果就不變。如果引數為常量或者無引數,在生成執行計劃時,直接將這類函式替換為常量。
stable,穩定,在一個事務中呼叫時,只要函式的引數不變結果就不變。
volatile,不穩定。
函式的穩定性會影響資料庫的一些行為:
1、繫結變數,immutable函式(包含常量引數或不包含引數時)計算一次。stable函式每次bind的時候要重算。
2、生成執行計劃,stable, immutable函式作為WHERE條件時,可以被用於索引AM。(即允許採用索引優化)
3、排除分割槽表不需要訪問的分割槽,stable, immutable函式作為WHERE條件時,可用於過濾不需要訪問的子表。
4、是否可用於建立索引,只有immutable函式或操作符,可以用於建立表示式索引。
等。
詳細介紹見末尾文件。
參考
https://docs.oracle.com/cd/B19306_01/server.102/b14200/statements_5009.htm
http://www.dba-oracle.com/plsql/t_plsql_deterministic.htm
《PostgreSQL 函式穩定性與constraint_excluded分割槽表邏輯推理過濾的CASE》
《函式穩定性講解 – retalk PostgreSQL function`s [ volatile|stable|immutable ]》
《函式穩定性講解 – 函式索引思考, pay attention to function index used in PostgreSQL》
《函式穩定性講解 – Thinking PostgreSQL Function`s Volatility Categories》
相關文章
- PostgreSQLOracle相容性-Analysis函式之keepSQLOracle函式
- PostgreSQLOracle相容性之NUMTODSINTERVALSQLOracle
- PostgreSQLOracle相容性之-roundintervalSQLOracle
- 【穩定性】穩定性建設之依賴設計
- PostgreSQLOracle相容性-synonym匿名SQLOracle
- Oracle PL/SQL 之 函式OracleSQL函式
- PostgreSQLOracle相容性之-全域性臨時表globaltemptableSQLOracle
- PostgreSQLOracle相容性之-PartitionByOuterJoin實現稠化報表SQLOracle
- MogDB/openGauss的三種函式穩定性關鍵字函式
- PostgreSQLOracle相容性-connectby2SQLOracle
- 淺談系統的不確定性與穩定性
- 研發效能與穩定性保障
- 排序穩定性排序
- PG extract 函式示例函式
- PostgreSQLOracle相容性-substrb-orafcesubstrb適配OraclesubstrbSQLOracle
- 確定性函式改造sql函式SQL
- Oracle函式的確定性Oracle函式
- PostgreSQLOracle相容性之-系統列(ctid,oid,cmin,cmax,xmin,xmax)SQLOracle
- PL/SQL 函式 包SQL函式
- Kafka 的穩定性Kafka
- GaussDB(for Redis)穩定性與擴容表現Redis
- PL/SQL 中的儲存過程與函式SQL儲存過程函式
- 【穩定性】從專案風險管理角度探討系統穩定性
- 開發效率與系統穩定性雜談
- PL/SQL 06 函式 functionSQL函式Function
- App穩定性測試APP
- PostgreSQLOraclePL/SQL相容性之-AGGREGATEUSINGClause聚合函式SQLOracleGC函式
- SAP QM 穩定性研究功能研習系列1 - 穩定性研究總流程
- BGP專線如何提高網路安全與穩定性?
- PL/SQL表---table()函式用法SQL函式
- kafka-穩定性-事務Kafka
- TPP穩定性之場景隔離和多租戶
- ORACLE單行函式與多行函式之四:日期函式示例Oracle函式
- ORACLE單行函式與多行函式之六:通用函式示例Oracle函式
- PL/SQL單行函式和組函式詳解(轉)SQL函式
- ORACLE單行函式與多行函式之七:多行函式之分組函式示例Oracle函式
- postgresql pg_xlog_location_diff 函式SQL函式
- PG wal日誌LSN相關函式函式