《mysql篇》--索引事务

07-16 1188阅读

索引

索引的介绍

索引是帮助MySQL高效获取数据的数据结构,是一种特殊的文件,包含着对数据表里所有记录的引用指针,因为索引本身也比较大,所以索引一般是存储在磁盘上的,索引的种类有很多,不过如果没有特殊说明,我们一般认为索引是一个B+树的结构。

索引的作用

优势:

  • 可以提高列检索的效率,降低搜索成本。
  • 对提高数据库的性能有很大的作用。
  • 通过索引对数据进行,排序也可以大大提高排序效率
  • 数据库中的表、数据、索引之间的关系,类似于书架上的图书、书籍内容和书籍目录的关系。

    劣势:

    • 会占用磁盘空间
    • 有时可能会比较危险,在创建索引时需要对现有的数据,进行大规模的从新整理(调整存储的数据结构),如果当前是一个空表,或者数据不多,创建索引一般没有什么问题,如果这个表本来就很大,此时创建索引就需要对所有数据进行重新调整结构,重新存储,就有可能把服务器给卡住,一般来说,创建索引都是在创建表时就规划好的。

      索引的使用

      查看索引

      show index from 表名;

      举例:

       create table demo(
      id int primary key,
      age int,
      name varchar(20));
      show index from demo;

      《mysql篇》--索引事务

      创建索引

      create index 索引名字 on 表名(列名);

      举例:

      create index index_id on demo(id);
      show index from demo;
      

      《mysql篇》--索引事务

      //这里的举例只是为了讲解

      删除索引

      drop index 索引名 on 表名;

       drop index index_id on demo;
       show index from demo;

      《mysql篇》--索引事务

      //主键,unique,外键都是会自动生成索引的

      索引内部的原理和逻辑

      如果没有特殊说明,我们一般认为索引是一个B+树的结构。

      二叉搜索树

      博主在之前的博客中有详细讲解过二叉搜索树,如果有兴趣可以去看看。

      B树

      在将B+树之前我们要先了解一些B树,B树又叫多路平衡查找树,他并不是一棵二叉树,而是一棵多叉树,每个结点有M个子节点,M称为B树的阶,

      B树的特点包括:

      • 每个节点可以有多个子节点,这使得B树能够优化大块数据的读写操作。
      • B树的所有叶子节点都在同一层,保持了树的平衡。
      • B树中的关键字从小到大排列,每个结点上有M个key,划分出M+1个区间
      • 叶子节点不包含关键字,指向这些外部结点的指针为空,叶子结点的数目正好等于树中所包含的关键字总个数加1。

        《mysql篇》--索引事务

        每个结点可以看作是一个区间,从无穷小到无穷大,每一个关键字都会将这个区间划分,每个小区间又可以向下延申出子结点,又或者说每个结点里所包含的关键字大小,都在其对应的父结点,的相应的小区间里

        举例:查找7

        首先从根结点开始,7比10小,所以在10左边的区间,然后继续查找比较,7比3大,在3右边的区间,继续查找比较,在这个结点中可以查找到7,查找结束。

        进行查询的时候,就可以直接从根结点出发,判定当前要查找的数据在节点上的哪个区间,决定下一步往哪里走,进行添加/删除元素可能会涉及到结点的拆分和结点的合并

        //B树可以有效的减少访问硬盘的次数,从而大大提高检索的性能

        B+树

        • 为了进一步提高检索的性能,在B树的基础上改造得到了B+树,B+树是B树的改进,针对数据库量身定做
        • B+树也是一个N叉搜索树,一个结点上存在N个key,划分成N个区域
        • 每个节点上N个key中,最后一个就相当于当前子树的最大值
        • 父节点上的每个key都会以最大值的身份,在子节点的对应区间中存在(key可能会重复出现)
        • 叶子节点这一层,包含整个树的数据全集
        • B+树会以链表的形式,把叶子节点串起来(此时就方便我们进行遍历,也方便按照范围取出一个子集)

          《mysql篇》--索引事务

          假如说要查询id>26 and id

VPS购买请点击我

文章版权声明:除非注明,否则均为主机测评原创文章,转载或复制请以超链接形式并注明出处。

目录[+]