索引的可選擇性

2021-09-23 19:21:32 字數 941 閱讀 7694

索引的「可選擇性」是指在該索引列裡儲存不同值的數目和記錄數的比。比如某個表的記錄數是

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的最優化,優化器不應該使用選擇性不好的索引。如果是使用基於...