我們為什麼要用索引,用索引為什麼比不用索引快

2021-08-25 23:24:34 字數 787 閱讀 2351

經過老楊的細心指點,我才真正的明白、理解、記住(以前曾看過索引的資料,時間長都忘啦)。

老楊問我如果一張表上沒有索引,你要查id=5的記錄,資料庫會怎麼做?

我說資料庫會先根據資料字典找到這張表,然後根據表頭的記錄找到這張表的資料塊,然後每個資料塊去找。

老楊:會把所有的資料塊都掃一遍嗎?

我:有可能會,有可能不會。(我回答錯啦)

老楊:那麼什麼時候會全掃?什麼時候不全掃?

我:有可能掃第乙個塊的時候就找到了id=5的行,就不去掃其他的塊啦,也有可能掃到最後的乙個塊才找到d=5的資訊,就全掃啦。

老楊:可能是我問你的問題誤導你了,我一說id=5你就以為id是主鍵,那麼如果找的不是id=5而是name=張三的呢?

我:那樣會全掃。

老楊:為什麼會全掃,可能在找第乙個快的時候就找到了name=張三的資訊啦。

我:因為name=張三的行有很多重複的。

老楊:這就對啦,如果不用索引,即使是找一條資料庫裡沒有的資料,oracle也會把表的所有塊都掃一遍,然後返回結果,索引記錄了行的資訊,所以有時候我們要用索引。那麼用索引為什麼會提高效能呢?

老楊:因為索引(以b樹索引為例)是樹狀結構,最上面的是根,根下面是枝,枝再下面是葉,根會記錄比如1-20的id在第乙個枝上,21-40在第二個枝上... ... ,這樣我們找id=5的資料,走索引的話,通過掃瞄根就直接去找第乙個枝,通過掃瞄第乙個枝找到所有id=5的行的rowid找到所有id=5的資料。而且,索引是有序的(這也是有些時候索引會比表大的乙個原因),這樣就提高了效率。

以上不是原話,原話記不清啦,是我理解的大概意思!

Mysql使用索引為什麼會變快?

mysql 使用的是 btree 索引,那它是怎麼加速檢索的呢?檢索中主要耗時在於記憶體與磁碟的io耗時,所以加速的關鍵在於減少io的次數。圖中是一顆 b 樹,每個磁碟塊包含幾個資料項和指標,如磁碟塊 1 包含資料項 17 和 35,包含指標 p1 p2 p3,p1指向包含資料項小於17的磁碟塊,p...

我們為什麼要用框架。

先說下我熟悉的兩個框架的作用 1,struts,它也就是提供了控制層,用它的話,我們只管寫頁面和模型,而不需要去考慮 乙個請求發出後,是怎麼到達乙個action,然後action又是怎麼呼叫模型的方法,又是怎麼把請求 到別的頁面。這一系列控制層的工作,我們都不需要考慮了,因為struts已經替我們做...

為什麼我們要用Spring Boot?

為什麼我們要用 spring boot,spring boot 最重要的功能是 自動配置。為什麼說是自動配置?configuration componentscan enableautoconfiguration 上面三個註解,前面兩個都是 spring 自帶的,和 spring boot 無關,所...