【TUNE_ORACLE】Oracle索引設計思想(三)過濾因子概述與計算
什麼是過濾因子
過濾因子(FF)是某張表中滿足謂詞條件的行數佔全錶行數的比例,描述了謂詞的選擇性。比如某個課外興趣班每加入一個男生,則謂詞sex=’M’的過濾因子就會變大(重複率變高),所以 過濾因子越小越適合建索引(點陣圖索引除外)。
計算公式
1. 過濾因子(FF)= 結果集的數量 / 表總行數
比如,一個班級的總人數是50人,男生佔30人,因此謂詞sex=’M’的過濾因子就是30/50=60%
2. 平均過濾因子 = 1 / count(distinct(XXX))
因此,在評估一個索引建立的必要性時,最差的情況下的過濾因子大小(趨近於100%)比平均過濾因子更重要,因為最差情況的輸入條件下,基於特定索引的查詢消耗的時間最長。
組合謂詞的過濾因子計算
1. 如果組合謂詞中的列與列之間毫無關聯(非關聯列),則組合謂詞的過濾因子大小就可以透過每個謂詞的過濾因子計算出來。比如某地區的人口資訊表中的組合謂詞“Name = ‘XXX’ and Education=‘XX’”中的這兩個列(姓名和學歷)找不出任何關聯(因為同名的人很多),所以該組合謂詞的過濾因子=FF(NAME)* FF(ADDR)
2. 如果組合謂詞中的列與列之間有一定的關聯(關聯列),則組合謂詞的過濾因子大小大於每個謂詞的過濾因子計算出來的乘積。比如汽車製造商資訊表中的組合謂詞“Make=’XXX’ and Model=’XXXX’”可能存在強關聯,因為一個汽車型號可能只屬於一個特定的製造商(比如只有特斯拉才製造Model Y型汽車,所以僅透過MODEL=’Model Y’這個條件我們就可以無需查詢另一個條件就能知道最終結果大小),因此假設FF(make)=0.1%,FF(model)=0.01%,所以該組合謂詞的過濾因子一定大於或遠大於0.1% * 0.01%的乘積, 因此在實際生產環境中這種組合謂詞不推薦使用,影響了查詢效率,也有可能影響了統計資訊的準確性(即使是人為手動收集統計資訊也會不準確)。
重要說明
1. 不同資料庫廠商對選擇性這個概念的定義不同,Oracle是“不同值的行數除以表中的記錄數”,Sybase是“索引中重複的鍵值比例”,本文以Oracle資料庫作為案例,所以採用Oracle廠商的定義。
2. 對於另一個名詞“高選擇性”,不同的人會有截然相反的理解:有人認為是“一個選擇性很高的數字(謂詞重複率高)”,有人認為是“一個選擇性很低的數字(謂詞重複率低)”。本人習慣於後者的說法,因此本人的文章中的“高選擇性”就表示:“一個選擇性很低的數字”
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69992972/viewspace-2761859/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 【TUNE_ORACLE】Oracle索引設計思想(二)索引過濾列概述Oracle索引
- 【TUNE_ORACLE】Oracle索引設計思想(一)索引片和匹配列概述Oracle索引
- 【TUNE_ORACLE】Oracle索引設計思想(四)三星級索引Oracle索引
- 【TUNE_ORACLE】檢視索引的叢集因子SQL參考Oracle索引SQL
- 【TUNE_ORACLE】Oracle Hint之常用Hint功能概述(三)Oracle
- MapReduce原理與設計思想
- 【TUNE_ORACLE】索引定期重建的利與弊Oracle索引
- Laravel 模型過濾(Filter)設計Laravel模型Filter
- Mobx 原始碼與設計思想原始碼
- Ftj aRTTy因子計算最佳實踐
- 好程式設計師大資料培訓分享HBase Filter過濾器概述程式設計師大資料Filter過濾器
- Oracle索引規劃設計Oracle索引
- ORACLE索引概述Oracle索引
- 計算機圖形學-線性過濾計算機
- 資料庫索引設計與優化讀書筆記--《一》概述資料庫索引優化筆記
- Java設計模式-過濾器模式Java設計模式過濾器
- 漲跌因子計算器,鄒衍,三點交易測算支撐壓力
- 【TUNE_ORACLE】檢視錶,列和索引的統計資訊SQL參考Oracle索引SQL
- 【TUNE_ORACLE】Oracle Hint之常用Hint功能概述(五)Oracle
- 【TUNE_ORACLE】Oracle Hint之常用Hint功能概述(四)Oracle
- 【TUNE_ORACLE】Oracle Hint之常用Hint功能概述(二)Oracle
- 【TUNE_ORACLE】Oracle Hint之常用Hint功能概述(一)Oracle
- 極簡設計模式-過濾器模式設計模式過濾器
- 關於資料過濾的設計
- Servlet 2.3過濾器程式設計 (轉)Servlet過濾器程式設計
- 【TUNE_ORACLE】你建立的索引為什麼不工作了?(三)Oracle索引
- 請教過濾選擇框設計程式設計如何寫程式設計
- 一個插排引發的設計思想 (三) 委託與事件事件
- 【TUNE_ORACLE】檢查統計資訊是否過期SQL參考OracleSQL
- LSM樹由來、設計思想以及應用到HBase的索引索引
- MySQL 表與索引設計攻略MySql索引
- 資料庫索引設計與優化讀書筆記--《三》SQL處理過程資料庫索引優化筆記SQL
- clustering factor索引聚簇因子和執行計劃索引
- 計算機網路概述計算機網路
- 計算機 網路概述計算機
- 程式設計思想 面向切面程式設計程式設計
- Windows XP Professional計算機啟動過程概述Windows計算機
- C++程式設計思想筆記之三 (轉)C++程式設計筆記