美文网首页
索引的相关笔记

索引的相关笔记

作者: BowonQin5 | 来源:发表于2022-12-14 22:06 被阅读0次

1.1 索引

1.1 索引概述

  • 介绍
    索引(index)是帮助MySQL高效获取数据的数据结构(有序)。在数据之外,数据库系统还维护着满足特定查找算法的数据结构,这些数据结构以某种方式引用(指向)数据, 这样就可以在这些数据结构上实现高级查找算法,这种数据结构就是索引。


    5.jpg
  • 演示


    6.jpg

    备注:上述的二叉树结构只是示意图,并非真正的索引结构。

  • 优缺点


    7.jpg

1.2 索引结构

MySQL的索引是在存储引擎层实现的,不同的存储引擎有不同的结构,主要包含以下几种:


8.jpg
9.jpg

我们平常所说的索引,如果没有特别指明,都是指B+树结构组织的索引。

  • 二叉树


    10.jpg

    二叉树缺点:顺序插入时,会形成一个链表,查询性能大大降低。 大数据量情况下,层级较深,检索速度慢。
    红黑树:大数据量情况下,层级较深,检索速度慢。

  • B-Tree(多路平衡查找树)
    以一颗最大度数(max-degree)为5(5阶)的b-tree为例(每个节点最多存储4个key,5个指针,指针=key+1):

    11.jpg
    树的度数指的是一个节点的子节点个数。
    具体动态变化的过程可以参考网站: https://www.cs.usfca.edu/~galles/visualization/BTree.html
  • B+Tree
    以一颗最大度数(max-degree)为4(4阶)的b+tree为例:


    13.jpg

插入 100 65 169 368 900 556 780 35 215 1200 234 888 158 90 1000 88 120 268 250 数据为例。

14.jpg

相对于B-Tree区别:
①. 所有的数据都会出现在叶子节点
②. 叶子节点形成一个单向链表
MySQL索引数据结构对经典的B+Tree进行了优化。在原B+Tree的基础上,增加一个指向相邻叶子节点的链表指针,就形成了带有顺序指针的B+Tree,提高区间访问的性能。


15.jpg
  • Hash
    哈希索引就是采用一定的hash算法,将键值换算成新的hash值,映射到对应的槽位上,然后存储在hash表中。
    如果两个(或多个)键值,映射到一个相同的槽位上,他们就产生了hash冲突(也称为hash碰撞),可以通过链表来解决。


    16.jpg
    • Hash索引特点

      1. Hash索引只能用于对等比较(=,in),不支持范围查询(between,>,< ,...)
      2. 无法利用索引完成排序操作
      3. 查询效率高,通常只需要一次检索就可以了,效率通常要高于B+tree索引
    • 存储引擎支持
      在MySQL中,支持hash索引的是Memory引擎,而InnoDB中具有自适应hash功能,hash索引是存储引擎根据B+Tree索引在指定条件下自动构建的。


      17.jpg

1.3 索引分类

18.jpg

在InnoDB存储引擎中,根据索引的存储形式,又可以分为以下两种


19.jpg

聚集索引选取规则:

  • 如果存在主键,主键索引就是聚集索引。
  • 如果不存在主键,将使用第一个唯一(UNIQUE)索引作为聚集索引。
  • 如果表没有主键,或没有合适的唯一索引,则InnoDB会自动生成一个rowid作为隐藏的聚集索引。


    20.jpg
    21.jpg
22.jpg

1.4 索引语法

  • 创建索引

    CREATE [UNIQUE|FULLTEXT] INDEX index_name ON table_name(index_col_name,...);
    
  • 查看索引

    SHOW INDEX FROM table_name;
    
  • 删除索引

      DROP INDEX index_name ON table_name;
    

    按照下列的需求,完成索引的创建

    1. name字段为姓名字段,该字段的值可能会重复,为该字段创建索引。
    2. phone手机号字段的值,是非空,且唯一的,为该字段创建唯一索引。
    3. 为profession、age、status创建联合索引。
    4. 为email建立合适的索引来提升查询效率。
    CREATE INDEX idx_user_name on tb_user(name);
    CREATE UNIQUE INDEX idx_user_phone on tb_user(phone);
    CREATE INDEX idx_user_pro_age_sta ON tb_user(profession,age,status);
    CREATE INDEX idx_email on tb_user(email);
    

相关文章

  • UITableView 索引

    索引的相关属性设置: 实现tableView索引相关的代理

  • 索引相关

    最左前缀的一些理解

  • 索引相关

    一、查询表上的索引 --查询索引字段

  • 索引相关

    1.MySQL中使用较多的索引有Hash索引,B+树索引2.InnoDB默认索引实现为:B+树 hash索引 1....

  • 四、ElasticSearch-其他

    一、操作 1.查看索引Setting配置信息 2.查看索引相关mappings相关配置信息 3.添加索引+类型的 ...

  • SEO 学习笔记

    本文为观看慕课网SEO搜索引擎优化后的笔记。后期如有对搜索引擎优化相关的工作心得和经验也会记录于此。感谢慕课网老师...

  • sql语法 _ 索引

    索引 1,索引相关 2,MySQL创建,删除索引 3,索引测试 4,索引总结 (表格接上) 1,如果范围大...

  • 卡片盒笔记~索引与关联

    笔记之间的关联比索引更重要,什么是索引呢?索引就是找到一条笔记的入口,比如flomo上的一个标签就是一个索引。 索...

  • mysql笔记

    mysql笔记 索引创建索引创建唯一索引CREATE UNIQUE INDEX indexName ON tabl...

  • mysql索引相关

    创建、修改、删除索引CREATE INDEX index_name ON table_name (column_l...

网友评论

      本文标题:索引的相关笔记

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