SQL 優化 概念篇 之 選擇性和基數
最近在研究 Christian Antognini 關於 Troubleshooting Oracle Performance 這本書, 當翻閱到後面時, 感覺到對前面的部分概念又模糊了。談到優化,如果你概念都摸稜兩可的話,就是一件很悲哀的事情了,或許你認為在真實環境中實戰幾次就可以理解概念了。我個人認為, 實戰是加深概念理解的最直接的方法,作為一個經驗尚淺的DBA,我決定在概念理解上多下工夫,因此有必要對概念作一個小小的記錄 (古人云:最淡的墨水勝過最強的記憶!!)
(1) 選擇性 (selectivity ) : 一個操作過濾的記錄的比例, 是一個介於 0 和 1 之間的數值。
(2) 基數 (cardinality) : 一個操作所返回的記錄的條數。
以num_rows 表示被處理的記錄數, 這 cardinality 與 selectivity 之間存在以下關係
cardinality = selectivity × num_rows
對於一般的操作, 其選擇性是通過 查詢語句返回的記錄數 除以 表中儲存的記錄數 得到, 但是在實際生產環境中,一般的操作是完全不能滿足我們的需求的, 如果我們在語句中 使用了 group by 和 聚合函式(eg: sum max min avg), 我們返回的記錄數肯定就不是我們過濾的記錄數了, for example :
以下是我的一個測試表,表中的記錄數為6 如下:
SQL> select count(*) from book_test;
COUNT(*)
----------
6
通過 sum 聚合函式對測試表進行操作:
SQL> select sum(price) from book_test;
SUM(PRICE)
----------
316
以上操作 我們返回行為1 其實我們的選擇性應該為 6/6 = 1 而不是我們的一般演算法 1/6
談了這麼多,可能你認為,選擇性是幹什麼的? 有用嗎? 其實一個操作對應的選擇效能夠幫助你確定那條訪問路徑是最優的訪問路徑。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/8117479/viewspace-671321/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 前端效能JQuery篇之選擇器優化前端jQuery優化
- jQuery程式碼優化:選擇符篇jQuery優化
- 【TUNE_ORACLE】檢視每個列的選擇性和基數SQL參考OracleSQL
- SQL Server SQL效能優化之引數化SQLServer優化
- 直方圖、基數、選擇性、群集因子直方圖
- SQL最佳化必懂概念(一):基數SQL
- SQL SERVER 日期相關性優化選項SQLServer優化
- MySQL 效能優化之儲存引擎選擇MySql優化儲存引擎
- SQL優化之操作符篇(zt)SQL優化
- JQuery選擇器——可見性篩選選擇器和屬性篩選選擇器jQuery
- 選擇優化選項的方案優化
- CSS 選擇器效能優化CSS優化
- IT優化級別的選擇優化
- SQL Server優化之SQL語句優化SQLServer優化
- SQLServer表變數和臨時表系列之概念篇SQLServer變數
- 深入理解 CSS:基礎概念、註釋、選擇器及優先順序CSS
- sql優化之邏輯優化SQL優化
- MySQL 效能優化之SQL優化MySql優化
- SQL優化之統計資訊和索引SQL優化索引
- SQL優化基礎SQL優化
- Python 快速教程(基礎篇05): 縮排和選擇Python
- 排序(2)--選擇排序,歸併排序和基數排序排序
- jQuery基礎——樣式篇 (選擇器)jQuery
- SQL 選擇SQL
- Redis基礎篇(五)AOF與RDB比較和選擇策略Redis
- MySQL字首索引和索引選擇性MySql索引
- 選擇排序-演算法及優化排序演算法優化
- 基於CBO優化器謂詞選擇率的計算方法優化
- oracle優化一例之sql優化Oracle優化SQL
- jQ基礎篇–jQuery選擇器總結jQuery
- MySQL之SQL優化技巧MySql優化
- SQL優化之limit 1SQL優化MIT
- mysql優化篇(基於索引)MySql優化索引
- Django ORM效能優化之count和len方法的選擇(非常詳細推薦乾貨)DjangoORM優化
- Android效能優化篇之服務優化Android優化
- SQL SERVER 引數化選項SQLServer
- sql優化基礎視訊SQL優化
- 【SQL】sql優化小工具之SQLHCSQL優化