今天和同学探讨说MySQL哪些存储引擎支持hash索引,因为所看书籍MySQL版本和现有的MySQL版本有出入,故中间出了点歧义。所以就手动敲了一下代码,测试了一下MySQL8.0中的存储引擎是如何支持hash索引的。
我们都知道MySQL最常用的存储引擎为InnoDB和MyISAM。它们默认的存储引擎都是B-Tree(实质为B+Tree)。他们本身都是不支持hash索引的。但是我们在建表时给某些字段添加hash索引,或者后期为某表添加hash索引时,如果他们的存储引擎为InnoDB或MyISAM,则sql脚本本身是不会报错的,但是我们会发现,该hash索引字段的index_type仍然为BTREE。如果存储引擎为Memory,因为这个引擎本是就是支持hash索引的,索引其hash索引字段的index_type自然为HASH。OK,say is one thing,coding is another thing.展示例子如下:
1、InnoDB测试用例:
已有users表,存储引擎为InnoDB
1.1、为useraddress字段添加hash索引:
alter table users add index idx_hash_userAddress using hash(useraddress);
1.2、查看表定义:
show create table users;
结果如下:

本文通过实测探讨MySQL8.0中InnoDB和MyISAM存储引擎对hash索引的支持情况。尽管两者默认不支持hash索引,但在创建时不会报错,但实际index_type仍为BTREE。Memory引擎则原生支持HASH索引。同时提到InnoDB有自适应哈希索引机制,当发现建立哈希索引能提高效率时,会自动创建。
最低0.47元/天 解锁文章
1190

被折叠的 条评论
为什么被折叠?



