1. 程式人生 > >【轉】使用索引為什麽能提高查詢速度?

【轉】使用索引為什麽能提高查詢速度?

更多 地址 sga 數據緩沖 同時 list 磁盤 ID 大量數據

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

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

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

舉個例子:

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

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

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

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

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

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

索引有什麽副作用嗎?

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

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

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

【轉】使用索引為什麽能提高查詢速度?