1. 程式人生 > >索引能夠發揮作用,主要由兩個因素決定,返回行數和叢集因子

索引能夠發揮作用,主要由兩個因素決定,返回行數和叢集因子

主要根據叢集因子的大小來決定

叢集因子(CLUSTERING_FACTOR)是對錶的有序性的量度,通過一個索引掃描一張表時需要訪問表的資料庫的數量;

一個欄位上有索引,但有時執行sql語句時看執行計劃時不走索引,就有可能是叢集因子過高導致的。

 

叢集因子的計算方法:

T表的ID列,首先對ID列進行從小到大排序,得到序列(1,1,1,2,3,4,5,5,5..........);

初始化叢集因子為0;

然後依次檢視序列中所在的儲存塊,如果在同一個塊,則叢集因子不變,否則加1;

所以,極端情況下,叢集因子為行數,理想情況下,約為塊數;

可以看到,叢集因子越接近塊數,查詢索引的一個值所需訪問的塊數就越少,索引也有效。

而當叢集因子接近行數時,查詢索引的一個值所需訪問的塊數就越多,甚至不弱全表掃描,即使SQL返回的行數為1%,可能也用不上索引。

從叢集因子的演算法來看,叢集因子只與資料分佈有關,如果叢集因子過大,重建索引毫無作用,只有刪除表的資料,重新按照索引列排序插入,改變資料分佈;

如果叢集因子接近於表中塊的數量,則表示索引適當排序;如果叢集因子接近於表中行的數量,則表示索引沒有適當排序