使用索引為什么能提高查詢速度?


為什么能夠提高查詢速度?

索引就是通過事先排好序,從而在查找時可以應用二分查找等高效率的算法。

 

一般的順序查找,復雜度為O(n),而二分查找復雜度為O(log2n)。當n很大時,二者的效率相差及其懸殊。

 

舉個例子:

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

 

在一個或者一些字段需要頻繁用作查詢條件,並且表數據較多的時候,創建索引會明顯提高查詢速度,因為可由全表掃描改成索引掃描。

 

(無索引時全表掃描也就是要逐條掃描全部記錄,直到找完符合條件的,索引掃描可以直接定位)

不管數據表有無索引,首先在SGA的數據緩沖區中查找所需要的數據,如果數據緩沖區中沒有需要的數據時,服務器進程才去讀磁盤。

 

1、無索引,直接去讀表數據存放的磁盤塊,讀到數據緩沖區中再查找需要的數據。

 

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

 

索引有什么副作用嗎?

索引是有大量數據的時候才建立的,沒有大量數據反而會浪費時間,因為索引是使用二叉樹建立.當一個系統查詢比較頻繁,而新建,修改等操作比較少時,可以創建索引,這樣查詢的速度會比以前快很多,同時也帶來弊端,就是新建或修改等操作時,比沒有索引或沒有建立覆蓋索引時的要慢。索引並不是越多越好,太多索引會占用很多的索引表空間,甚至比存儲一條記錄更多。

對於需要頻繁新增記錄的表,最好不要創建索引,沒有索引的表,執行insert、append都很快,有了索引以后,會多一個維護索引的操作,一些大表可能導致insert 速度非常慢。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM