• 数据库索引


    一.索引的引用

    索引类似于一本书的目录,可以根据页码更快的查找到内容。索引可以加快访问数据库的速度

    二.索引的分类

    1.按表的列属性分类

    (1).普通索引:最基本的索引,没有任何限制;

    (2).唯一索引:索引列的值必须唯一,允许有空值。如果是组合索引,则列值的组合必须唯一;

    (3).主键索引:是一种特殊的唯一索引,一个表只能有一个主键,不允许有空值;

    (4).组合索引:指多个字段上创建的索引,只有在查询条件中使用了创建索引时的第一个字段,索引才会被使用。使用组合索引时遵循最左前缀集合;

    (5).全文索引:主要用来查找文本中的关键字,而不是直接与索引中的值相比较,mysqlMyISAM支持全文索引而InnoDB不支持;

    2.按数据结构分类

    MySQL存储引擎InnoDB,MyISAM和Memory分别支持的索引类型

     InnoDBMyISAMMemory
    B树YesYesYes
    HashNoNoYes
    FullTextYesYesNo

    B树:基于平衡二叉树,默认使用的索引类型

    B- 叶子节点无水平指针
    B+ 叶子节点有水平指针,可以方便范围查询
    B* 枝节点有水平指针,mysql当前默认

    R树:R树是B树在高维空间的扩展,是一棵平衡树

    Hash:基于哈希表实现,只有精确匹配索引所有列的查询才有效。

    FullText:基于相似度的查询,而不是精确数值比较。

    GIS:以较小的数据量管理大量数据的查询,从而提高空间查询的效率和空间定位的准确性。

    3.按存储结构分类

    (1).聚集索引(唯一性):

            MySQL 会自动选择主键作为聚集索引列,没有主键会选择唯一键,如果都没有会生成隐藏的.
            MySQL进行存储数据时,会按照聚集索引列值的顺序,有序存储数据行
            聚集索引直接将原表数据页,作为叶子节点,然后提取聚集索引列向上生成枝和根

    (2).辅助索引(多个):

            提取索引列的所有值,进行排序
            将排好序的值,均匀的存放在叶子节点,进一步生成枝节点和根节点
            在叶子节点中的值,都会对应存储主键ID

    辅助索引细分还可以分为:唯一索引,单列辅助索引,联合索引

    (3).聚集索引和辅助索引的区别

    表中任何一个列都可以创建辅助索引,在你有需要的时候,只要名字不同即可
    在一张表中,聚集索引只能有一个,一般是主键.
    辅助索引,叶子节点只存储索引列的有序值+聚集索引列值.
    聚集索引,叶子节点存储的时有序的整行数据.
    MySQL 的表数据存储是聚集索引组织表,辅助索引查询表。
    注:mysql的查询过程就是通过辅助索引找到主键索引的id号,再通过主键索引查数据行

    三.索引的命令操作

    1. 查询索引
    2. desc city;
    3. PRI ==> 主键索引
    4. MUL ==> 辅助索引
    5. UNI ==> 唯一索引
    6. mysql> show index from city\G
    7. 创建索引
    8. 单列的辅助索引:
    9. mysql> alter table city add index idx_name(name);
    10. 多列的联合索引:
    11. mysql> alter table city add index idx_c_p(countrycode,population);
    12. 唯一索引:
    13. mysql> alter table city add unique index uidx_dis(district);
    14. mysql> select count(district) from city;
    15. mysql> select count(distinct district) from city;
    16. 前缀索引
    17. mysql> alter table city add index idx_dis(district(5));
    18. 删除索引
    19. mysql> alter table city drop index idx_name;

  • 相关阅读:
    大学生数学建模题论文
    深入浅出了解MYSQL8特性注入是什么
    Apache SeaTunnel 正式发布2.3.5版本,功能增强及多个Bug修复
    【设计模式】外观模式
    Java基础学习笔记-4
    linux软件包管理
    如何解决Smartsheet 登录时遇到的问题
    Python 通过selniumwire调用企查查原生接口抓取企查查公开企业信息全过程——以抓取成都500万家企业为例
    学懂C#编程:让函数返回 多个返回值 的几种常用技术
    实战分析:SpringBoot项目 JSR303校验、Hutool工具类的具体使用
  • 原文地址:https://blog.csdn.net/m0_65487180/article/details/133133151