索引的出现其实就是为了提高数据查询的效率,就像书的目录一样。
MySQL 的索引是在存储引擎层实现的, 不同引擎对索引的支持情况也是不同的.
今天就一起看下 MySQL中的 Hash 索引....Hash索引是将一列或者多列数据值, 进行 hash运算, 并将结果映射到数组的某个位置上.
当hash值冲突时, 会追加一个链表存储数据....由于 Hash索引本身的特殊性, 也带来了很多限制和弊端.
1.Hash索引只适合等值比较查找, 如"=", IN, "", 不适合范围查找和匹配查找, 如like, ">", ""等...;
2.Hash索引适合区分度很高的列, 反之, 会造成hash值的大量冲突, 大量数据在一个无序链表中比较查询, 性能可想而知.
3.因为散列数组的长度是有限的, 所以Hash索引也只适合数据量不是很大的情况下使用....
4.Mysql 中的 Innodb引擎是不支持手动创建 Hash索引的, 只提供了内部优化使用的自适应哈希索引(Adaptive Hash Index).