索引

作者: 垂直居中的句号 | 来源:发表于2021-05-26 18:22 被阅读0次

索引相当于一个目录,占用一定的存储空间,方便快速查找数据,没有索引的话查询会遍历所有数据。
将无序的数据有序存储。hash的话会将数据的hash值按顺序存储。 Btree的话会将数据的地址按顺序存储。

  1. 把创建了索引的列的内容进行排序
    2.对排序结果生成倒排表
    3.在倒排表内容上拼上数据地址链
    4.查询的时候,先拿到倒排表的内容,再取出数据地址链,从而拿到具体数据。

聚簇索引和非聚簇索引
都是使用了B+树
聚簇索引:将数据存储和索引放到一块,并且按照一定的顺序组织的,找到索引就找到了数据,数据的物理存放顺序和索引顺序是一致的。
非聚簇索引
叶子节点不存储数据,索引存储的是数据行的地址,根据索引查找数据行的位置,之后再去磁盘上查找数据。
类似一本书的目录。

优点: 1.非聚簇索引需要二次查找,聚簇索引的查找效率高。

  1. 聚簇索引对于范围查询和排序的场合效率很高。

劣势

  1. 维护索引很昂贵。特别是插入行,主键被修改导致分页的时候,建议在大量的插入新行后,选择在负载较低的时间段,通过OPTIMIZE TABLE 优化表,因为移动行数据可能会造成碎片,使用独享表空间可以弱化碎片。
    2.表使用UUID作为主键会使数据存储稀疏,会出现聚簇索引比全表扫描更慢。
    3.如果主键比较大的话,辅助索引将会变的更大,因为辅助索引的叶子存储的是主键值,过长的主键值,会导致非叶子节点占用更多的物理空间。
    InnoDB 中一定有主键,主键是聚簇索引,会使用unique索引,没有unique索引会使用一个隐藏的id来当作主键索引,在聚簇索引之上创建的索引称之为辅助索引,辅助索引访问数据都是二次查找。非聚簇索引都是辅助索引,像复合索引、前缀索引、唯一索引。辅助索引叶子节点存储的不再是存储位置,而是主键值。

myism 使用的是非聚簇索引,没有聚簇索引,有两颗B+树,主键索引B+树的节点存储的主键,辅助索引B+树存储的辅助键。叶子节点两颗树使用了一个地址指向真正的表数据。

mysql的数据结构
innodb 默认是B+树索引。hash索引,底层的数据结构是哈希表,绝大多数数需求为单条记录查询,选择哈希索引,查询性能最快;其余大部分场景,建议选择B+索引。

B+树 : 平衡多叉树 , 根节点到每个叶子节点的距离差不超过1,同层级的节点间有指针相互连接。适合范围查找。
哈希索引: 将键值换算成hash值, 和对应的数据存储地址,存到hash表中,不需要像B+树那样从根节点到叶子节点逐层查找,可以一次hash直接点位到相应的位置。适应于等值查询。不支持联合索引

b树是一个二叉搜索树,父节点只有子节点。非叶子节点的左指针指向小于其关键字的子树,右指针指向大于其关键字的子树;如果左右子树节点数量差不多就逼近二分查找,二分查找是连续的内存空间,改变B数的结构不需要移动大段的内存数据。

B-数 是多路搜索树。不是二叉,但是基于二叉结构。包括根节点,叶子节点,分支节点。
根节点:一个B树索引只有一个根节点,他实际就是位于树的最顶端的分支节点。
分支节点:包含的条目指向索引里其他的分支节点或者叶子节点。
叶子节点:包含的条目直接指向表里的数据行。

索引的设计原则
1.where字句需要查询的列
2.数据量较少的表
3.使用短索引
4.不要过度索引
5.定义外键的数据列一定要建立索引。
6.更新频繁的字段不适合创建索引
7.若不能有效区分数据(如男女)的列不适合做索引列。
8.尽量扩展索引,不要新建索引。
9.重复值较多,查询涉及列较少的不要建索引
10.对于定义text /image 和bit数据类型的列不要建立索引。

mysql 锁的类型
基于锁的属性分类:共享锁、排他锁
基于锁的粒度分类:

相关文章

  • MySQL索引

    MySQL索引 索引介绍 索引原理与分析 组合索引 索引失效分析 索引介绍 什么是索引索引:包括聚集索引、覆盖索引...

  • Mysql优化

    一.索引科普 主键索引 唯一索引 普通索引 单列索引 多列索引 聚簇索引 非聚簇索引 前缀索引 全文索引 二.优化...

  • Oracle 索引学习

    创建索引 标准语法 唯一索引 组合索引 反向键索引 示例 删除索引 修改索引 重建索引 联机重建索引 合并索引

  • MySQL索引

    索引的作用 查看索引 创建索引 删除索引 索引类型 强制索引和禁止某个索引

  • Pandas数据操作

    Pandas数据操作 Series索引 行索引 切片索引 不连续索引 布尔索引 DataFrame索引 列索引 不...

  • 深入理解四种数据库索引类型(- 唯一索引/非唯一索引 - 主键索

    唯一索引/非唯一索引 主键索引(主索引) 聚集索引/非聚集索引 组合索引 唯一索引/非唯一索引 唯一索引 1.唯一...

  • MYSQL索引

    mysql的4种常用索引类型:唯一索引,主键索引,全文索引,以及普通索引。 普通索引(INDEX):普通索引为索引...

  • 索引类型

    索引类型有: 主键索引; 唯一索引; 普通索引; 全文索引; 多列索引;

  • mysql 查询效率优化之 常用索引的几种类型 新手使用教程,少

    Mysql常见索引有:主键索引、唯一索引、普通索引、全文索引、组合索引(联合索引,多列索引) 一、建立的方法介绍 ...

  • MySql 数据查询优化

    1. MySQL索引类型: mysql的索引有5种:主键索引、普通索引、唯一索引、全文索引、聚合索引(多列索引)。...

网友评论

      本文标题:索引

      本文链接:https://www.haomeiwen.com/subject/tuzhsltx.html