如何理解Mysql的索引及他們的原理?

時間 2021-05-06 13:13:56

1樓:安靜的木小昊

100萬個資料, 順序排列, 它的維護效能很好, 很容易增刪改資料. 但是它的檢索效能很差, 最差的情況要查詢100萬次.

如果將每個記錄的主鍵按照平衡樹來排列, 那麼檢索效能提公升很多, 最壞情況查詢log2(100萬)次. 但是維護效能下降, 插入乙個記錄的代價變得高了.

將主鍵以平衡樹的方式儲存主鍵, 葉子結點指向記錄, 叫做聚集索引.

有的時候我們不是按照主鍵去查詢的, 該欄位如果不在平衡樹中, 只能順序查詢了.

所以我們將經常查詢的字段也做成乙個平衡樹,我們就建立了乙個非聚集索引.

但是,非聚集索引葉子節點指向是記錄, 而是主鍵.

知道主鍵後在通過聚集索引去查詢對應的記錄值.

索引, 是以犧牲空間和維護效能為代價, 去提公升檢索效能.

所以你應該將最常查詢的列設定為非聚集索引, 而不是將所有的列都設為索引.

當然索引的型別不僅於此. 如有錯誤還望指正

2樓:qianchaochushui

原理還是B+樹;

乙個表兩列 id與name

id -- name

1 -- name1

2 -- name2

3 -- name3

4 -- name4

5 -- name5

6 -- name6

15-- name15

查詢乙個名字

select name from user where id = 12;

還是需要乙個乙個查詢;

那麼如何優化

使用b+樹優化後的結構,基本上查詢的次數,等於樹的高度;這也是為什麼儲存不用2叉樹,樹太高查詢次數也多。

當資料為100W的時候,道理一樣;如果不優化查詢次數乙個乙個變數,b+樹的高度不可能為10W,對嗎?

這個大約就是mysql的索引原理。

3樓:

如果某個字段,或一組欄位會出現在乙個會被頻繁呼叫的where子句中,那麼它們應該是被索引的,這樣會更快的得到結果。同時,唯一索引的用途前面提到了,恰當的使用它們,避免意外的發生。我個人不推薦使用全文索引,尤其對於漢字來說,全文索引的開銷太大了,我寧可選擇搜尋引擎提供的站內搜尋功能。

雖然搜尋引擎的收錄不是很及時,但是我覺得也不是不能接受。

全文索引:在全文中索引?與之對應的是什麼索引?

索引的好處和壞處

建立索引的好處:

1、 加快經常被搜尋欄位的搜尋速度。

2、利用索引的唯一性來控制記錄的唯一性

3、 等

建立索引的壞處:

1、額外的儲存空間(單列索引佔原表5%至15%空間,想象一下如果為乙個表建立三四個索引)

索引的分類

聚集索引

非聚集索引

雜湊索引

B+-樹索引(二分查詢)

4樓:

1. 什麼是索引:我們拿出一本新華字典,它的目錄實際上就是一種索引:

非聚集索引。我們可以通過目錄迅速定位我們要查的字。而字典的內容部分一般都是按照拼音排序的,這實際上又是一種索引:

聚集索引。

2:用不用索引

索引至少會帶來如下的overhead

額外的建立時間

額外的儲存空間(單列索引佔原表5%至15%空間,想象一下如果為乙個表建立三四個索引)

額外的維護時間

這一切只為了乙個目的:減少在small range query的情況下的query time。如果是大range query 返回1%以上的資料,這情況下索引的意義不大。

3. 用什麼索引:

low selectivity情況下比如parent column為性別,bitmap index什麼的可以考慮

high selectivity可以用btree什麼的來維持二分查詢的查詢效率

5樓:

比如你在看書的時候想找到特定的主題,一般先看書的索引,找到對應的頁碼。在mysql中儲存引擎用類似的方法建立索引,先在索引中找到對應的值,然後根據匹配的索引紀錄找到對應的行。比如你執行sql語句:

select first_name from actors where actor_id =5,則mysql根據索引找到actor_id等於5的行,然後返回包含該值的資料行。

6樓:Aloe Sun

索引,我的理解就是一種根據某個字段整理好的資料快取,這個快取被存在資料庫乙個特殊的區域,有的時候甚至是在記憶體裡,通過索引,大大增加了查詢的速度,但是也會占用更多計算機的資源。舉個例子,在運營商海量資料的資料庫使用者表中中,包含有使用者id以及使用者身份證號碼兩個字段,並且這兩者都是唯一並且一一對應的,那麼如果你對id建立了索引,你通過這個索引的速度找到對應的客戶,是絕對比通過身份證號碼去找到對應的客戶要快不只乙個數量級的。當然,索引也不是建的越多越好。

哪些字段設定為索引欄位要考慮到表的規模,搜尋的複雜度,以及需求等因素。

7樓:

索引類似於字典的前面的查字表,把某個欄位的資料從頭到尾排序放在一起,並寫明對應的資料記錄的位置。這樣搜尋的時候只要翻這個就可以了,不需要從頭到尾遍歷資料

MYSQL索引如何能提高查詢效率?

樹懶學堂 資料庫常見面試題 資料索引 B 樹索引與雜湊索引 Hash索引的優缺點 My ISAM和In no DB的使用場景 樹懶學堂索引是通過預先排列的順序,這樣在查詢時可以應用二分查詢等高效演算法。常規順序查詢,複雜性 O n 二分查詢複雜性 log2n 在n很大的情況下,兩者的效率差別及其懸殊...

mysql 索引是怎麼實現的?

說起索引就必須要先說下資料結構和演算法。資料結構和演算法是相互依存的,資料怎樣的儲存就意味著你需要可以使用什麼樣的演算法進行查詢。比如你是乙個無序陣列,你想查詢某乙個name A 的資料有哪些,你只能進行資料遍歷查詢了 但是這個陣列是按name排序的,這樣你就可以使用二分查詢或者同樣的是順序查詢,時...

MySQL 索引優化器選擇索引的規則是什麼?

mysqlops MySQL的優化器不是簡單基於規則或 CBO 基於成本 而混合之用,但是傾向於基於成本優化為主的模式,但是一般都會根據統計資訊,以及 SQL語句的成本,甚至伺服器的空閒程度而選擇乙個合適的計畫.並且mysql對SQL語句會進行改寫的,對於執行計畫有三個相關的引數 optimizer...