除了b-tree 索引,mysql還提供了如下索引:
只有memory引擎支援,場景簡單
myisam的乙個特殊索引型別,主要用於地理空間資料型別
myisam的乙個特殊索引,主要用於全文索引,從mysql 5.6開始innodb支援全文索引
索引 / 儲存引擎myisaminnodbmemoryb-tree索引支援支援支援hash索引不支援不支援支援r-tree索引支援支援不支援full-text索引支援支援不支援
最常用的索引也就是b-tree索引和hash索引,且只有memory, ndb兩種引擎支援hash索引。 hash索引適於key-value查詢,通過hash索引比b-tree索引查詢更加迅速。但hash索引不支援範圍查詢例如<><==,>==等。 memory只有在"="的條件下才會使用hash索引
mysql在 8.0才支援函式索引,在此之前只能對列的前面某一部分進行索引,例如標題title欄位,可以只取title的前10個字元索引,這樣的特性大大縮小了索引檔案的大小,但字首索引也有缺點,在order by和group by操作時失效。
create index idx_title on film(title(10));
只存在陣列,用乙個hash函式把key轉換成乙個確定的記憶體位置,然後把value放在陣列的該位置。使用 hash 自然會有雜湊衝突可能,mysql 採取拉鍊法解決。
hash索引基於hash表實現,只有查詢條件精確匹配hash索引中的列時,才能夠使用到hash索引。對於hash索引中的所有列,儲存引擎會為每行計算乙個hashcode,hash索引中儲存的就是hashcode。
比如我們想查id_card_n4對應username:
四個id_card_n值並不一定遞增,這樣即使增加新的user,速度也快,只需在後追加。 當然缺點也很明顯,不是有序,所以hash索引做區間查詢速度很慢。比如要找身份證號在[id_card_x, id_card_y]區間的所有使用者,就須全表掃瞄。
要使innodb或myisam支援雜湊索引,可以通過偽雜湊索引來實www.cppcns.com現,叫自適應雜湊索引。
可通過增加乙個字段,儲存hash值,將hash值建立索引,在插入和更新的時候,建立觸發器,自動新增計算後的hash到表裡。
雜湊表這種結構適用於只有等值查詢的場景,比如memcached。
假如有乙個非常非常大的表,比如使用者登入時需要通過email檢索出使用者,如果直接在email列建索引,除了索引區間匹配,還要進行字串匹配比對,email短還好,如果長的話這個查詢代價就比較大。 若此時,在email建立雜湊索引,查詢以int查詢,效能就比字串比對查詢快多了。
建立雜湊索引,首先就要選定雜湊演算法,《高效能mysql》說到的crc32演算法。
在表中新增hash值的字段:
alter table `user` add column email_hash int unsigned not null default 0;
接下來就是在update和insert時,自動更新 email_hash 字段,通過觸發器實現:
delimiter |
create trigger user_hash_insert before insert on `user` for each row begin
set new.email_hash=crc32(new.email);
end;
|create trigger user_hash_update before update on `user` for each row begin
set new.email_hash=crc32(new.email);
end;
|delimiter ;
這樣select請求就會變成:
select `email`, `email_hash` from `user` where
email_hash = crc32(「[email protected]」)
and `email`= 「[email protected]」;
+----------------------------+------------+
| email |&程式設計客棧nbsp; email_hash |
+----------------------------+------------+
| [email protected] | 2765311122 |
+----------------------------+------------+
and email = "[email protected]" 是為了防止雜湊碰撞時資料不準確。
mysql 不用怕面試題 MySQL 面試題
資料庫事務的四個特性及含義原子性 atomicity 一致性 correspondence 隔離性 isolation 永續性 durability 原子性 整個事務中的所有操作,要麼全部完成,要麼全部不完成。事務在執行過程中發生錯誤,會被回滾 rollback 到事務開始前的狀態,就像這個事務從來...
經典面試題講解筆記
原因 併發爭搶修改導致,乙個人正在寫入,另乙個同學過來搶,導致資料修改不一致,出現異常 方案 1.new vector 2.collections.synchronizedlist new arraylist 2.juc包中的new copyonwritearraylist 4.hashset的底層...
C 面試題之i 面試題
i 面試題1.cpp 中國台灣某著名防毒軟體公司2005年10月面試題 int i 3,j 4 i?i j printf d d n i,j a.3 3 b.4 4 c.3 4 d.4 3 答案b i 面試題2.cpp 中國某著名計算機金融軟公司2005年面試題 int x 1,j 2 int k ...