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...