傳說中的“謂詞越界“場景
開發環境,碰見一個謂詞越界的問題,模擬這條SQL,如下所示,其中A_ID是表test的外來鍵,並且存在索引,
這張表的資料量,大約10萬,
檢視select 1這條SQL的10053,
看見提示,#2這列,即A_ID,對於超出範圍的、不存在的值,使用0.000002作為選擇率,即這種選擇率,是預估的值,不是實際計算的,換句話說,有可能對執行成本的計算,產生偏差,
Using prorated density: 0.000002 of col #2 as selectvity of out-of-range/non-existent value pred
我們從這張表,A_ID欄位實際的儲存,看下是否存在他所說的,“超出範圍”,
上述結果展示,A_ID的取值範圍是6006992-6052756,而trace中,標記A_ID的min和max則是5586857-5726449,因此,這條SQL,出現了傳說中的“謂詞越界”,
Min: 5586857 Max: 5726449
trace中的min和max,怎麼得來的?他是讀取的dba_tab_col_statistics檢視,通過換算得到的,
但是慶幸的是,雖然出現了謂詞越界的問題,並沒有因為成本值計算偏差,導致CBO選擇錯誤的執行計劃,我覺得和這條SQL的謂詞條件比較簡單,有一定的關係,可選擇的執行計劃就這兩種,
因此這個案例中,雖然出現了“謂詞越界”,對COST的計算,會有誤差,但並未影響執行計劃的選擇,如果是一條謂詞複雜的SQL,包含多種執行計劃的可能,出現“謂詞越界”,選錯執行計劃,形成效能問題,就是大概率了。
解決方法,就是重採集統計資訊,以讓COST的計算,更接近實際,避免使用預設值,讓CBO作出正確選擇。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/7192724/viewspace-2286274/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- C++謂詞C++
- Java 8謂詞鏈Java
- 03-NSPredicate謂詞
- java8-謂詞(predicate)Java
- 說說對WebSocket的理解?應用場景?Web
- 5.1一階謂詞邏輯
- 原子謂詞公式和合式公式公式
- 首席說|NLP場景應用中的可解釋性
- 大資料SQL中的Join謂詞下推,真的那麼難懂?大資料SQL
- 傳說中的WindowManager
- 【大資料】SparkSql連線查詢中的謂詞下推處理(一)大資料SparkSQL
- 【大資料】SparkSql 連線查詢中的謂詞下推處理 (二)大資料SparkSQL
- 【TUNE_ORACLE】列出SQL謂詞中需要建立索引的列SQL參考OracleSQL索引
- 所謂的職場祕籍
- 說一說V-Layout框架的原理和使用場景框架
- 說說你對棧、佇列的理解?應用場景?佇列
- 說說你對JS中暫性死區的理解,它有什麼運用場景?JS
- SQL 改寫系列七:謂詞移動SQL
- SQL 改寫系列六:謂詞推導SQL
- 說說你對堆的理解?如何實現?應用場景?
- C++中傳指標和傳引用的區別,各自的使用場景是什麼C++指標
- 大伽「趣」說AI:在多個場景中的AI落地實踐AI
- 【SQL】Oracle查詢轉換之謂詞推送SQLOracle
- 說說你對vue的mixin的理解,有什麼應用場景?Vue
- 說說HTTP 常見的狀態碼有哪些,適用場景?HTTP
- 說說你對postMessage的理解,它有什麼運用場景呢?
- 請說說input的inputmode屬性有什麼應用場景?
- C++ 一元謂詞對應的lambda表示式C++
- Redis 中 HyperLogLog 的使用場景Redis
- Redis 中 BitMap 的使用場景Redis
- MaxComputeTunnel上傳典型問題場景
- CodeQL學習筆記(1)-QL語法(邏輯連線詞、量詞、聚合詞、謂詞和類)筆記
- 說說你對歸併排序的理解?如何實現?應用場景?排序
- 說說你對選擇排序的理解?如何實現?應用場景?排序
- 你有使用過MediaRecorder嗎?說說它的運用場景有哪些?
- 【GreatSQL最佳化器-02】索引和Sargable謂詞SQL索引
- 同事有話說 | 那些所謂的敏捷儀式感敏捷
- MaxCompute Tunnel上傳典型問題場景