
课程咨询: 400-996-5531 / 投诉建议: 400-111-8989
认真做教育 专心促就业
MySQL数据库的学习与应用是目前大多数软件开发程序员都需要熟练掌握的一个编程技能,而本文我们就通过案例分析来了解一下,MySQL数据库索引类型分析。
1、HASH索引
hash索引的查询效率要高于B+Tree,但是99%的情况都是用B+Tree,极少情况下用hash。hash结构索引的原理:对索引字段做hash计算,把运算的结果值和这一行数据所在磁盘地址做映射。
那么,使用HASH索引时,对于数据查找,HASH索引做一次hash运算就可以在hash映射表里快速找到这一行的磁盘文件地址。一次hash就可以快速定位到索引所在行的磁盘文件地址!
即使表有一亿个数据,按这种算法,那也就可能经历一次hash运算就可以快速找到某页任意一行数据元素的所在的磁盘文件地址,时间复杂度是O(1),那比B+Tree快得多啊!那为啥99%的情况下都是用B+Tree而不用hash呢?
原因是如果使用范围查找,hash就没有用武之地了,在业务中范围查找是很常用的,但HASH索引不支持,所以基本就不怎么用hash这种数据结构。hash索引适用于等值查询的场景。
2、全文索引
MySQL5.6以前的版本,只有MyISAM存储引擎支持全文索引。从InnoDB1.2.x版本开始,InnoDB存储引擎开始支持全文检索,对应的MySQL版本是5.6.x系列。
但不管什么引擎,只有字段的数据类型为char、varchar、text及其系列才可以建全文索引。
不过MySQL从设计之初就是关系型数据库,存储引擎虽然支持全文检索,整体架构上对全文检索支持并不是太好而且限制很多,比如:1.每张表只能有一个全文检索的索引,2.不支持没有单词界定符(delimiter)的语言,如中文、日语、韩语等的限制。
3、主键索引
MySQL默认使用主键建立索引。
将索引和数据(或数据地址)一块维护在一棵B+Tree上,树的非叶子节点是主键,叶子节点是主键及主键对应的行记录(或数据地址)。
MySQL默认使用主键建立索引树,如果没有主键会看是否有可以标识一个行记录的列,有则使用该列建立索引树,没有的话MySQL内部会创建一个隐含的列类似于rowid来建立索引树。
4、非主键索引
除了主键外的其他字段建立的索引,也叫普通索引,辅助索引、二级索引。
相较于主键索引,InnoDB存储引擎的辅助索引会建立另外的一棵B+Tree,这棵索引树的叶子节点的索引位(可以理解为key)就是我们选的索引列,叶子节点的数据位(可以理解为value)为主键值,而不是像主键索引那样索引位是主键,数据位是那一行的完整数据(除主键外)。这么做的目的一是为了节省空间,二是为了高效和保证数据的一致性。
【免责声明】本文系本网编辑部分转载,转载目的在于传递更多信息,并不代表本网赞同其观点和对其真实性负责。如涉及作品内容、版权和其它问题,请在30日内与管理员联系,我们会予以更改或删除相关文章,以保证您的权益!更多内容请加danei0707学习了解。欢迎关注“达内在线”参与分销,赚更多好礼。