1.什麼是索引?
資料庫索引是表中的乙個特殊的資料結構,存放的記錄的快速檢索的值,也稱為目錄,被儲存在乙個地方,所以索引是乙個存在的檔案,並不是儲存在記憶體中
索引的存在是為了在查詢時,可以直接通過查詢索引找到那一條記錄所在的位置,而不是逐一的去檢索,大大的提高的查詢的效率
那麼是不是每一列都建立乙個索引呢?
並不是,因為對資料的操作進行增刪改的時候,還回去更新索引,所以如果每一列都設定索引,會極大的影響增刪改的效率
2.索引的分類
★普通索引:在任何欄位上都可以建立的索引
create index 索引名 on 表名(列名)
★唯一索引:該列上的值不能重複。
create unique index 索引名 on 表名(列名)
★主鍵索引
表中的主鍵是自帶主鍵索引,也就是說建立了主鍵就有主鍵索引
★聚合索引
create index 索引名 on 表名(列名1,列名2)
聚合索引按照從左到右的匹配原則。也就是必須先匹配列名1才能匹配列名2查詢。
★全文索引(myisam獨有的索引)
alter table 表明 add fulltext index 索引名稱(title, content)
適用於全文檢索的環境下
3.索引底層的資料結構和演算法
幾種資料結構:二叉樹(紅黑樹)、hash、b-tree、b+ tree
索引的實現通常使用 btree及其變種b+tree
原因:二叉樹:如果作為索引結構,那麼查詢的時候會從上而下逐級比較,並沒有很好的提高查詢效率,紅黑樹可以提高效率,但是資料量大,紅黑樹就越深,查詢效率會越來越慢,同時是io讀取
btree:節點會拿過來放到記憶體中,同一行上所有的節點會全部讀取,比io快很多
b+tree:對btree進行優化的一種更適合實現外儲存索引的資料結構,非葉子節點不儲存資料,只儲存key,增大度(節點的資料儲存個數),順序訪問指標,提高區間訪問的效能
hash:適合等值查詢(前提是不存在大量重複鍵值,如果存在重複鍵就會出現雜湊碰撞的問題)。
雜湊索引不適用的場景(為什麼不用hash)
(1)不支援範圍查詢(經過hash演算法後後,就變成不連續的了);
(2)不支援利用索引完成排序、以及like 『***%』 這樣的部分模糊查詢;
(3)不支援聯合索引的最左字首匹配規則;
什麼是雜湊索引?(memory引擎)
雜湊索引就是採用一定的雜湊演算法,把鍵值換算成新的雜湊值,檢索時不需要類似b+樹那樣從根節點到葉子節點逐級查詢,只需一次雜湊演算法即可立刻定位到相應的位置,速度非常快。
4.查詢注意避免索引失效
1、避免在索引列上出現null。 where book_name=null;
2、不要在索引列上進行算術運算。:select age+1 from user
3、避免實現!=或者<>、is null或者is not null、in等可能導致全表遍歷的操作。
4、模糊查詢只能使用右邊%。
5、where語句後盡可能少用小括號、或者不要出現小括號巢狀小括號。
資料庫mysql索引 資料庫 mysql索引
mysql 索引 mysql索引的建立對於mysql的高效執行是很重要的,索引可以大大提高mysql的檢索速度。打個比方,如果合理的設計且使用索引的mysql是一輛蘭博基尼的話,那麼沒有設計和使用索引的mysql就是乙個人力三輪車。索引分單列索引和組合索引。單列索引,即乙個索引只包含單個列,乙個表可...
mysql更新索引庫 Mysql資料庫索引增刪改查
一.索引的作用 一般的應用系統,讀寫比例在10 1左右,而且插入操作和一般的更新操作很少出現效能問題,遇到最多的,也是最容易出問題的,還是一些複雜的查詢操作,所以查詢語句的優化顯然是重中之重。在資料量和訪問量不大的情況下,mysql訪問是非常快的,是否加索引對訪問影響不大。但是當資料量和訪問量劇增的...
MySQL資料庫索引
mysql資料庫索引 目錄 1 myisam與innodb的區別 2 索引的優缺點 3 如何選用索引 4 檢視索引 5 雜湊索引 6 b 樹 7 索引分類 1 myisam與innodb的區別 1 show engines 圖1.1 截圖1 a mysql資料表主要支援如圖所示的儲存引擎,分為 事務...