mysql 索引的區別 mysql索引區別

2021-10-18 10:20:36 字數 1774 閱讀 5263

myisam主鍵索引與普通索引的區別:

myisam索引檔案和資料檔案是分離的,索引檔案僅儲存資料記錄的位址。

myisam的索引與行記錄是分開儲存的,叫做非聚集索引 非 (unclustered index)。

主鍵索引與普通索引沒有本質差異:葉子節點都是儲存對應行記錄的指標。

innodb主鍵索引與普通索引的區別:

innodb的普通索引所記錄的是實際的資料以及主鍵索引的記錄

也就是說,innodb的普通索引查詢會進行兩次查詢,當然這個兩次查詢也是有前提的,比如sql語句如下:select * from user where name = "ls";

myisam:myisam儲存引擎的普通索引與主鍵索引在索引指向方面都是指定位實際的資料在磁碟中的位置(指標)

innodb回表查詢:根據普通索引查詢到主鍵,又去主鍵索引去磁碟中檢索資料。

在innodb儲存引擎下,當sql語句查詢的時候用到普通索引,獲取的資料只要不存在於索引中的情況下就會出現回表問題

覆蓋索引:

主鍵索引:主要是主鍵

普通索引:普通索引是乙個範圍的定義,比如單列索引以及聯合索引其實都是屬於普通索引

hash索引

我們聽說過得hash一般是有hash演算法,還有hash加密等,比如:會有***x的**使用了hash演算法,hash加密 ,一般的話會有32位,64位的字串。

基於雜湊表實現,只有精確匹配索引所有列的查詢才有效,對於每一行資料,儲存引擎都會對所有的索引列計算乙個雜湊碼(hash code),雜湊碼是乙個較小的值,

大部分情況下不同的鍵值的行計算出來的雜湊碼是不同的,但是也會有例外,就是說不同列值計算出來的hash值一樣的(即所謂的hash衝突),雜湊索引將所有的雜湊碼儲存

在索引中,同時在雜湊表中儲存指向每乙個資料行的指標,hash很適合做索引,為某一列或幾列建立hash索引,就會利用這一列或幾列的值通過一定的演算法計算出乙個hash值,

對應一行或幾行資料。

針對上圖的理解:

keys:代表建立索引的列值;

buckets: 就是計算出來的hash值和對應的資料的物理位置組成的hash表;

entries:就是代表具體的資料行;

建立hash索引後,會為每個鍵值通過特定的演算法計算出乙個雜湊碼(hash code),需要注意的是不同的鍵值計算出來的hash值可能是相同的,例上圖上的 john smith 和sandra dee算出來的hash值都是152,

然後找到hash值為152在hash表中的儲存資料的物理位置,這個位置對應著兩條資料也(就是john smith 521-1234 和sandra dee 521-9655),然後再次遍歷這兩條資料,

找到需要的資料,這就解釋了為啥hash衝突嚴重了,hash索引效率降低的原因。

innodb引擎有乙個特殊的功能叫做自適應雜湊索引,當innodb注意到某些索引值被使用的非常頻繁時,它會在記憶體中基於btree索引之上再建立乙個雜湊索引,這樣就讓btree索引也具有雜湊索引的一些優點,

比如:快速的雜湊查詢,這是乙個全自動的,內部的行為,使用者無法控制或者配置,不過如果有必要,可以選擇關閉這個功能(innodb_adaptive_hash_index=off,預設為on)。

全文搜尋索引:

根據名稱建立全文索引:alter table customers1 add fulltext index testfulltext(name) with parser ngram;

select * from customers1 where match(name) against('-化實',in boolean mode) limit 0,5;

mysql索引的區別

組合索引 最左字首 alter table article add index time title 50 time 10 相當於建立了兩組組合索引 1 title time 2 title fulltext 全文索引,目前只有myisam引擎支援,目前只有 char varchar text 列上...

Mysql各種索引區別

mysql索引概念 說說mysql索引,看到乙個很少比如 索引就好比一本書的目錄,它會讓你更快的找到內容,顯然目錄 索引 並不是越多越好,假如這本書1000頁,有500也是目錄,它當然效率低,目錄是要佔紙張的,而索引是要佔磁碟空間的。mysql索引主要有兩種結構 b 樹和hash.hash hsah...

Mysql各種索引區別

mysql索引概念 說說mysql索引,看到乙個很少比如 索引就好比一本書的目錄,它會讓你更快的找到內容,顯然目錄 索引 並不是越多越好,假如這本書1000頁,有500也是目錄,它當然效率低,目錄是要佔紙張的,而索引是要佔磁碟空間的。mysql索引主要有兩種結構 b 樹和hash.hash hsah...