
课程咨询: 400-996-5531 / 投诉建议: 400-111-8989
认真做教育 专心促就业
学习索引的设计与应用是许多软件编程开发程序员都应该熟练掌握的一个编程技术,而本文我们就通过案例分享来简单了解一下,MySQL索引类型都有哪些。
先是索引的特点以及作用:
索引的目的是为了提升数据的效率。
对于ORM框架来说索引的使用至关重要,但是ORM的优化往往难以顾及所有业务情况,后续被逐渐废弃。
不同的索引类型适用于不同的场景。
索引关键在于减少数据需要扫描的量,同时避免服务器内部对内容排序和临时表(因为临时表会索引失效),随机IO转顺序IO等特点
下面介绍Mysql相关的索引类型:
哈希索引:哈希索引适合全值匹配和精确查找,查询的速度非常快在MySQL中只有memory存储引擎显式支持此索引,memory还支持非哈希索引的,是哈希索引设计里面比较特殊的。
空间索引:空间索引是myisam表支持,主要用作地理数据存储,这里包含一个叫做GIS的玩意,但是GIS在Postgre中使用比MySQL要出色很多,所以mysql中空间索引是无关紧要的东西。
全文索引:全文索引也是myisam独有支持的一种索引类型。适合使用的场景为全值匹配的场景和关键字查询,对于大文本的关键字匹配可以有效处理。
聚簇索引:聚簇索引是innodb存储引擎的默认存储引擎。
前缀压缩索引:注意这个索引针对的是myisam存储引擎,目的是为了让索引放入内存中排序,,前缀压缩的方法是先保存索引块的一个值,然后在保存二个值,存储二个值类似(长度,索引值)的形式存放前缀索引。
其他索引类型注意事项:
Archive在5.1之后才支持单列自增索引。
MyISAM支持压缩之后的前缀索引,使得数据结构占用更小。
哈希索引
在Mysql中显式实现哈希索引的存储引擎为Memory,Memory是存在非哈希索引,同时BTree也支持“自适应哈希索引的方式“兼容哈希索引。
下面是哈希索引特点:
键存储的是索引哈希值,注意不是索引值本身,而值存储的是指向行的指针
注意此哈希索引无法避免行扫描,但是在内存中指针非常快通常可以忽略不计
注意只有哈希值按照顺序排序,但是行指针不是按照顺序排序
哈希不支持:部分索引覆盖,只支持全索引覆盖,因为使用全部的索引列计算哈希值
哈希索引支持等值匹配操作不支持范围查询,比如等于,in子查询,不全等。
如果出现哈希冲突,哈希索引将退化为链表顺序查询,同时维护索引的开销也会变大
聚簇索引
聚簇表示数据行的值紧凑存储在一起。而innodb聚簇的值就是主键的值,所以通常使用都是主键上的索引,针对主键索引的选择十分重要。由于本部分着重索引优化,聚簇索引这里就不再讲述了。
MyISam和Innodb的主键索引区别是MyISam的索引很简单,因为数据行只包含行号,所以索引直接存储列值和行号,数据单独存放另一处,类似于一个非空索引,索引和数据不在一处,MyISam的索引设计比InnoDB简单很多,这和MyIsam不需要支持事务也有直接关系,而innodb将索引和行数据放入一个数据结构,将列进行紧凑的存储。
聚簇索引有下面优点
紧凑存储数据行,所以可以只扫描少量磁盘就可以获取到数据
数据访问的速度非常快,索引和数据放在同一颗BTree中,比非聚簇索引查询快很多
覆盖索引可以直接减少回表
当然索引也有下面的缺点:
对于非IO密集型应用,聚簇索引的优化无意义。
插入速度依赖于插入顺序,但是如果不是自增插入则需要optimizetable重新组织表。
更新代价非常高,因为BTree要保证顺序排序需要挪动数据页位置和指针。
主键数据插入过满数据页存在页分裂问题,行溢出会导致存储压力加大。
聚簇索引导致全表扫描变慢,页分裂导致数据问题等。
二级索引需要回表查询聚簇索引才能查询数据。
二级索引由于需要存储主键开销会更大,至少在InnoDb中维护一个二级索引的开销是挺大的。
压缩索引
压缩索引的特点是使用更少的空间存放尽可能多的内容,但是这样的处理方式仅仅适用于IO密集型的系统,压缩前缀存储形式大的缺陷是无法使用二分法进行查找,同时如果使用的倒序索引的方式比如orderbydesc的方式可能会因为压缩索引的问题存在卡顿的情况。
Bree索引的特点
叶子结点存在逻辑页和索引页两种,通常非底层叶子结点都是索引页,底层索引页由链表串联。
Btree索引会根据建表顺序对于索引值进行排序,索引建表时候建议将经常查询的字段往前挪。
Btree索引适合的查询类型:前缀查询,范围查询,键值查询(哈希索引)。
自适应哈希索引
当innodb发现某些索引列和值使用频繁的时候,BTree会在此基础上自动创建哈希索引辅助优化,但是这个行为是不受外部控制的,完全是内部的优化行为,如果不需要可以考虑关闭。
【免责声明】本文系本网编辑部分转载,转载目的在于传递更多信息,并不代表本网赞同其观点和对其真实性负责。如涉及作品内容、版权和其它问题,请在30日内与管理员联系,我们会予以更改或删除相关文章,以保证您的权益!更多内容请加danei0707学习了解。欢迎关注“达内在线”参与分销,赚更多好礼。