栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

mysql 索引

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

mysql 索引

为什么要使用索引?

我们可以将索引理解为书的目录,通过索引可以使查询效率更高。

主键默认是添加索引的。

什么是索引?

索引是帮助 MySql 高效获取数据的数据结构。

例如:主键 。 主键会默认添加索引。
主键维护在一个 B+ 树中,保持这条记录的物理地址。

索引的优劣势

优势:

  • 提高了查询效率(有 B+ 数排序,把索引数据加载到内存中),减少了 IO 次数。
  • 索引使用 B+ 树结构,是有序的,排序是比较快捷方便,减少了CPU 的消耗。

劣势:

  • 索引需要空间来存储和维护
  • 执行新增、修改、删除操作时,需要对索引进行结构的更新
添加索引的原则 1.哪些情况适合建立索引?
  1. 主键:默认添加唯一索引
  2. 作为查询条件的列
  3. 作为外键关联的列
  4. 排序的列
  5. 分组的列
2.哪些情况不适合添加索引?
  1. 表记录很少的(例如系统参数设置表)
  2. 不作为查询条件的列
  3. 增删改较为频繁的表,最好为需要的列来添加
  4. 数据重复度较高的(如性别)
索引分类
  1. 主键索引
    primary key 主键列自动会添加索引
  2. 单值索引/单列索引
    一个索引对应一个列
  3. 唯一索引
    列的值是唯一性的
  4. 组合索引
    一个索引中包含多个列
  5. 组合索引最左前缀原则
    例如:a、b、c 3列,a、b 列创建了组合索引,在查询时,必须要满足最左侧索引原则,否则索引失效。(最左侧索引原则:在使用组合索引时,最左侧的列必须被使用到,否则索引失效)
  6. 全文索引
    mysql 8 之后 innodb 引擎开始支持全文索引,使用全文索引可以代替 like 实现模糊查询,索引不会失效。
mysql 索引的数据结构

mysql 索引使用 B+ 树结构存储索引

B+ 树是有序的,每个节点可以存储多个数据(横向扩展)
非叶子节点不存储数据,只存储索引,一个节点中就可以存储多个索引
所有的数据存储在叶子节点中,每个叶子节点之间有指针指向

使用索引有序的节省了排序时间,一个节点中可以存储多个元素,从而使树高度降低了,并且叶子节点之间有指针,便于区间范围查询。

聚簇索引和非聚簇索引

聚簇索引:找到索引就找到了数据。

例如:innodb 引擎。索引和数据在同一个文件中,找到索引也就可以找到数据。(使用主键作为条件进行查询;如果使用其他列进行查询的话,查询的结果就只有自己)

非聚簇索引:找到了索引以后,还需要回表查询。

例如:myisam 引擎。索引和数据不在同一个文件中,找到索引后,就要去存储数据的文件中查找数据。

innodb 非聚簇:使用其他列作为条件进行查询,查询结果除了本列以外还有其他列的内容,这种情况就需要通过该列先查询到主键,然后通过主键再次回表查询数据。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/1006172.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号