MySQL常見索引概念

2021-09-11 13:02:48 字數 2381 閱讀 6153

1. 什麼是索引

索引就好比一本書的目錄,它會讓你更快的找到內容,但是目錄(索引)並不是越多越好,假如這本書1000頁,有500也是目錄,它當然效率低,目錄是要佔紙張的,而索引是要佔磁碟空間的。

2. mysql索引主要有兩種結構:
b+tree索引和hash索引.

mysql中,只有memory(memory表只存在記憶體中,斷電會消失,適用於臨時表)儲存引擎顯示支援hash索引,是memory表的預設索引型別,儘管memory表也可以使用b+tree索引。hsah索引把資料的索引以hash形式組織起來,因此當查詢某一條記錄的時候,速度非常快。但因為是hash結構,每個鍵只對應乙個值,而且是雜湊的方式分布。所以他並不支援範圍查詢和排序等功能。

b+tree是mysql使用最頻繁的乙個索引資料結構,是inodb和myisam儲存引擎模式的索引型別。相對hash索引,b+樹在查詢單條記錄的速度比不上hash索引,但是因為更適合排序等操作,所以他更受使用者的歡迎。畢竟不可能只對資料庫進行單條記錄的操作。

3. 選擇索引的資料型別

4. 選擇主鍵型別

選擇合適的識別符號是非常重要的。選擇時不僅應該考慮儲存型別,而且應該考慮mysql是怎樣進行運算和比較的。一旦選定資料型別,應該保證所有相關的表都使用相同的資料型別。

mysql常見索引有:主鍵索引、唯一索引、普通索引、全文索引、組合索引

mysql各種索引區別:

普通索引(由關鍵字key或index定義的索引)的唯一任務是加快對資料的訪問速度。因此,應該只為那些最經常出現在查詢條件(wherecolumn=)或排序條件(orderbycolumn)中的資料列建立索引。只要有可能,就應該選擇乙個資料最整齊、最緊湊的資料列(如乙個整數型別的資料列)來建立索引。

普通索引允許被索引的資料列包含重複的值。比如說,因為人有可能同名,所以同乙個姓名在同乙個「員工個人資料」資料表裡可能出現兩次或更多次。

如果能確定某個資料列將只包含彼此各不相同的值,在為這個資料列建立索引的時候就應該用關鍵字unique把它定義為乙個唯一索引。這麼做的好處:一是簡化了mysql對這個索引的管理工作,這個索引也因此而變得更有效率;二是mysql會在有新記錄插入資料表時,自動檢查新記錄的這個欄位的值是否已經在某個記錄的這個欄位裡出現過了;如果是,mysql將拒絕插入那條新記錄。也就是說,唯一索引可以保證資料記錄的唯一性。事實上,在許多場合,人們建立唯一索引的目的往往不是為了提高訪問速度,而只是為了避免資料出現重複。

必須為主鍵欄位建立乙個索引,這個索引就是所謂的「主索引」。主索引與唯一索引的唯一區別是:前者在定義時使用的關鍵字是primary而不是unique。

mysql自帶的全文索引只能用於資料庫引擎為myisam的資料表,如果是其他資料引擎,則全文索引不會生效。此外,mysql自帶的全文索引只能對英文進行全文檢索,目前無法對中文進行全文檢索。

如果為某個外來鍵字段定義了乙個外來鍵約束條件,mysql就會定義乙個內部索引來幫助自己以最有效率的方式去管理和使用外來鍵約束條件。

索引可以覆蓋多個資料列,如像index(columna,columnb)索引。這種索引的特點是mysql可以有選擇地使用乙個這樣的索引。如果查詢操作只需要用到columna資料列上的乙個索引,就可以使用復合索引index(columna,columnb)。不過,這種用法僅適用於在復合索引中排列在前的資料列組合。比如說,index(a,b,c)可以當做a或(a,b)的索引來使用,但不能當做b、c或(b,c)的索引來使用

組合索引最左字段用in是可以用到索引的,最好explain一下select。

注:
explain顯示了mysql如何使用索引來處理select語句以及連線表。可以幫助選擇更好的索引和寫出更優化的查詢語句。簡單講,它的作用就是分析查詢效能。

explain關鍵字的使用方法很簡單,就是把它放在select查詢語句的前面。

mysql檢視是否使用索引,簡單的看type型別就可以。如果它是all,那說明這條查詢語句遍歷了所有的行,並沒有使用到索引。

參考位址

時:2023年7月5日

mysql索引失效 常見mysql索引失效條件

使用索引的一般語句 1 where條件中有or,除非or的所有欄位都有索引,只要有乙個沒有索引,就不走索引 explain select from jf user ju where ju.user id or ju.superior1 yyy user id是主鍵,superior1是普通索引,結果...

mysql索引的概念 MySQL索引的定義

請注意,本文件基於mysql5.7 innodb引擎,也許會對以下的版本同樣生效,但不構成指導意見。關於mysql的索引,網上已經有太多的文章來解釋,這裡咱們不提那些老生常談的定義,嘗試從特殊一點的角度來直觀的理解索引。索引是幫助mysql高效獲取資料的排好序的資料結構,節點中的索引從左到右做遞增排...

MySQL索引(2)常見索引型別

聚簇索引也稱為主鍵索引,其索引樹的葉子節點中存的是整行資料,表中行的物理順序與鍵值的邏輯 索引 順序相同。乙個表只能包含乙個聚集索引。因為索引 目錄 只能按照一種方法進行排序。非聚簇索引也稱為普通索引,其索引樹的葉子節點中存的是主鍵的值。mysql回表 如果語句是 select from user ...