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相容性之-roundintervalSQLOracle
- PostgreSQLOracle相容性之-全域性臨時表globaltemptableSQLOracle
- PostgreSQLOracle相容性-connectby2SQLOracle
- 【穩定性】穩定性建設之依賴設計
- MogDB/openGauss的三種函式穩定性關鍵字函式
- PostgreSQLOraclePL/SQL相容性之-AGGREGATEUSINGClause聚合函式SQLOracleGC函式
- 穩定性
- 淺談系統的不確定性與穩定性
- 研發效能與穩定性保障
- 確定性函式改造sql函式SQL
- GaussDB(for Redis)穩定性與擴容表現Redis
- Kafka 的穩定性Kafka
- postgresql pg_xlog_location_diff 函式SQL函式
- App穩定性測試APP
- 【穩定性】從專案風險管理角度探討系統穩定性
- SAP QM 穩定性研究功能研習系列1 - 穩定性研究總流程
- BGP專線如何提高網路安全與穩定性?
- PG wal日誌LSN相關函式函式
- 非同步操作系列之Generator函式與Async函式非同步函式
- kafka-穩定性-事務Kafka
- 概念解讀穩定性保障
- 效能優化 (九) APP 穩定性之熱修復原理探索優化APP
- Oracle vs PostgreSQL Develop(23) - PL(pg)sql(引數宣告)OracleSQLdev
- PostgreSQL 原始碼解讀(149)- PG Tools#1(pg_basebackup主函式)SQL原始碼函式
- 多利熊基於分散式架構實踐穩定性建設分散式架構
- Node.js 指南(ABI穩定性)Node.js
- 穩定性保障,如何慢慢放量灰度
- app穩定性測試-iOS篇APPiOS
- Redis穩定性之戰:AOF日誌支撐資料持久化Redis持久化
- javascript之變數提升與函式提升JavaScript變數函式
- javascript之函式防抖與節流JavaScript函式
- Scala與Java差異(三)之函式Java函式
- 不可變資料之Immutable
- PostgreSQLoracle相容性-字串內嵌NULL字元(空字元)chr(0)轉換為chr(32)SQLOracle字串Null字元
- Kotlin之“with”函式和“apply”函式Kotlin函式APP
- GhostBSD 19.04 釋出,注重安全與穩定性的 FreeBSD 發行版
- 智慧支付穩定性測試實戰