JAVA索引

目录

前言

索引的使用场景

索引的优点与缺点

索引的分类

适用于Mysql的索引类型

索引的数据结构


前言

索引是依靠某些数据结构和算法来组织数据的存放方式,其最终目的是快速引导用户查询检索出所需要的数据。如果不使用索引,那么mysql数据库在查询数据时,就只能够一条一条的去比对,直到找到我们需要的数据,这样不仅浪费了大量的时间,同时也大大的消耗了系统不必要的性能。


索引的使用场景

使用索引的场景:

  1. 表的主键、外键必须有索引

  2. 数据量大的表需要有索引

  3. 经常与其他表连接的表,连接字段上应该有索引

  4. 经常被查询的字段

索引的优点与缺点

优点:

  1. 大大加快数据检索的速度

  2. 将随机I/O变成了顺序 I/O (B+树的叶子节点是连接在一起的)

  3. 加速表与表之间的连接

缺点:

  1. 建立索引需要占用物理空间

  2. 创建和维护索引需要花费时间,增删改查时都需要额外时间去维护索引

索引的分类

索引是在存储引擎中实现的,有两种存储引擎:

1. MyISAM和InnoDB:只支持BTREE索引, 也就是说默认使用BTREE,不能够更换

2. MEMORY/HEAP:支持HASH和BTREE索引

1. 主键索引:

        不允许重复,不能为空,一个表只能有一个主键索引

2. 组合索引:

        多个列值组成的索引,最左侧原则:使用了多个字段的最左侧字段时才能使用索引

3. 唯一索引:

        不允许重复,可空,索引列的值必须唯一,如果是组合索引,组合值必须唯一

4. 全文索引:

        对文本内容进行搜索

5. 普通索引:

        基本的类型,可空

适用于Mysql的索引类型

1. 全文索引

        一般用于查找文本中的关键字,多在CHAR,VARCHAR,TEXT等数据类型上创建。用来解决如 where name like '%zhang%' 等针对文本的模糊查询效率低下的问题。

2. 哈希索引

        用于等值查询,时间复杂度为 o(1), 效率非常高,但不支持排序、范围查询和模糊查询。

3. B+树索引

        INnoDB存储引擎默认的索引,支持排序、分组、范围查询、模糊查询,并且性能稳定。

4. 空间数据索引

        用于地理数据的存储,相比其他索引,优势在于范围查找。

索引的数据结构

1.哈希索引

  • 特点:无序

  • 优点: 单值查找快。

  • 缺点:哈希冲突,并且不支持范围查找。

2.B+树

  • 特点:有序

  • 对其他树的优势:

    1. 简单来说,前面的几种树都有缺点。

    2. 平衡树:极限情况会退化成链表,就没有意义了。

    3. 红黑树:索引的瓶颈=>io=>平均下来就是树的高度=>红黑树的高度太高相对B+树来说太高。

    4. B树:数据会放在非叶子节点,树的高度因此也比B+树高。

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值