【轉】使用索引爲何能提升查詢速度?

爲何可以提升查詢速度?算法

索引就是經過事先排好序,從而在查找時能夠應用二分查找等高效率的算法。服務器

 

通常的順序查找,複雜度爲O(n),而二分查找複雜度爲O(log2n)。當n很大時,兩者的效率相差及其懸殊。索引

 

舉個例子:進程

表中有一百萬條數據,須要在其中尋找一條特定id的數據。若是順序查找,平均須要查找50萬條數據。而用二分法,至多不超過20次就能找到。兩者的效率差了2.5萬倍!class

 

在一個或者一些字段須要頻繁用做查詢條件,而且表數據較多的時候,建立索引會明顯提升查詢速度,由於可由全表掃描改爲索引掃描。效率

 

(無索引時全表掃描也就是要逐條掃描所有記錄,直到找完符合條件的,索引掃描能夠直接定位)二叉樹

 

無論數據表有無索引,首先在SGA的數據緩衝區中查找所須要的數據,若是數據緩衝區中沒有須要的數據時,服務器進程纔去讀磁盤。數據

 

一、無索引,直接去讀表數據存放的磁盤塊,讀到數據緩衝區中再查找須要的數據。查詢

 

二、有索引,先讀入索引表,經過索引表直接找到所需數據的物理地址,並把數據讀入數據緩衝區中。di

 

索引有什麼反作用嗎?

  • 索引是有大量數據的時候才創建的,沒有大量數據反而會浪費時間,由於索引是使用二叉樹創建.

  • 當一個系統查詢比較頻繁,而新建,修改等操做比較少時,能夠建立索引,這樣查詢的速度會比之前快不少,同時也帶來弊端,就是新建或修改等操做時,比沒有索引或沒有創建覆蓋索引時的要慢。

  • 索引並非越多越好,太多索引會佔用不少的索引表空間,甚至比存儲一條記錄更多。

相關文章
相關標籤/搜索