索引的「可選擇性」是指在該索引列裡儲存不同值的數目和記錄數的比。比如某個表的記錄數是
1000條,而該錶的索引列的值只有900個不同的值(有100個是相同或是空)。這樣索引的可選
擇性為900/1000為0.9 。這樣當然效果就不好,最好的索引可選擇性(如主鍵索引)是1.0 。索
引的可選擇性是衡量索引的利用率的方法,比如在極端的情況下,乙個表記錄數是1000,而
索引列的值只有5個不同的值,則索引的可選擇性很差(只有0.005)。這樣的情形使用全表掃
描要比採用索引還好。
測量索引的可選擇性
方法1:
可以採用命令方式來測量某個索引的可選擇性值,例如compay表的city 列和state列是被建立
成索引,則:
compay 表的city和state 列的不同值的數目為:
select count( distinct ||%||state) from compay;
用下面語句查出compay表的記錄數:
select count(*) from compay;
按照前面的方法進行比可得到該索引的可選擇性值。
方法2:
用analyze 對錶進行統計,對錶進行分析後,系統同樣對索引進行了分析。在查詢結果。
analyze table compay compute statistics;
一旦表及其索引被分析過,就可以查詢user_indexes資料字典中的資料:
查詢不同索引的列值:
select distinct_keys from user_indexes where table_name=』compay』;
查詢表中的記錄數:
select num_rows from user_tables where table_name =』compay』;
索引可選擇性= distinct_keys / num_rows
索引 選擇性
索引的選擇性是指索引列中不同值的數目與表中記錄數的比。如果乙個表中有2000條記 錄,表索引列有1980個不同的值,那麼這個索引的選擇性就是1980 2000 0.99。乙個索引的選擇性越接近於1,這個索引的效率就越高。如果是使用基於cost的最優化,優化器不應該使用選擇性不好的索引。如果是使用基於...
mysql選擇性 Mysql索引的選擇性
對於索引的使用,mysql並不一直都是用採用正確的決定的。參考乙個簡單的表 create table r2 id int 11 default null,id1 int 11 default null,cname varchar 32 default null,key id1 id1 engine ...
索引的選擇性
索引的選擇性是指索引列中不同值的數目與表中記錄數的比。如果乙個表中有2000條記 錄,表索引列有1980個不同的值,那麼這個索引的選擇性就是1980 2000 0.99。乙個索引的選擇性越接近於1,這個索引的效率就越高。如果是使用基於cost的最優化,優化器不應該使用選擇性不好的索引。如果是使用基於...