MySQL索引ES索引

news/2024/7/7 5:48:19 标签: mysql, elasticsearch

MySQL

MySQL索引的种类

  1. 按照索引列值的唯一性:索引可分为唯一索引和非唯一索引;
    唯一索引:此索引的每一个索引值只对应唯一的数据记录,对于单列唯一性索引,这保证单列不包含重复的值。对于多列唯一性索引,保证多个值的组合不重复。主键索引是唯一索引的特定类型。该索引要求主键中的每个值都唯一。
  2. 索引列的个数:单列索引和复合索引;
  3. 按照索引列的物理组织方式:聚集索引和非聚集索引 (主键的B+Tree就是聚集索引)
    聚集索引(也叫聚簇索引)中,表中行的物理顺序与键值的逻辑(索引)顺序相同。一个表只能包含一个聚集索引。 如果某索引不是聚集索引,则表中行的物理顺序与键值的逻辑顺序不匹配。与非聚集索引相比,聚集索引通常提供更快的数据访问速度。

InnoDB的主键索引

MyISAM不管是主键索引,唯一键索引,或者普通索引,其索引均属于稀疏索引。而InnoDB必须有且仅有一个密集索引,这个密集索引的选取规则如下:

  1. 若一个主键被定义,该主键则作为密集索引;
  2. 若没有主键被定义,该表的第一个唯一非空索引则作为密集索引;
  3. 若不满足以上条件,InnoDB内部会生成一个隐藏主键(密集索引),这个隐藏的主键是一个6字节的列,该列的值会随着数据的插入而自增,也就是说,我们的InnoDB必须有一个主键,而该主键就必须作为唯一的密集索引而存在。那为什么它一定要有主键索引呢?看第4点;
  4. 非主键索引存储相关键位和其对应的主键值,包含两次查找。非主键索引,即稀疏索引的叶子节点并不存储行数据的物理地址,而是存储该行的主键值,所以非主键索引包含了两次查找,一次是查找次级索引之身,然后再查找主键,

根据该图,我们知道InnoDB会有一个密集索引,将主键组织到一颗B+树中,而行数据就存储在叶子节点上,因为InnoDB的主键索引和对应的数据是保存在同一个文件当中的,所以呢,检索的时候,在加载叶子节点的主键进入内存的同时,也加载了对应的数据。即若使用“where id =14“这样的条件查询主键,则按照B+树的检索算法即可查找到对应的叶子节点,并获得对应的行数据。

若对稀疏索引进行条件筛选,


http://www.niftyadmin.cn/n/4951871.html

相关文章

JVM加强

目录 JVM运行时的数据区(内存结构): 线程独享: 线程共享: 什么时候会内存溢出 JVM有哪些垃圾回收算法 GC如何判断对象可以被回收 典型的垃圾回收器 CMS: G1: 类加载器和双亲委派机制&a…

opencv图像特征-sift(尺度不变特征转换)

图像尺度空间 在一定的范围内,无论物体是大还是小,人眼都可以分辨出来,然而计算机要有相同的能力却很难,所以要让机器能够对物体在不同尺度下有一个统一的认知,就需要考虑图像在不同的尺度下都存在的特点。 尺度空间…

财报解读:上半年业绩实现增长,药师帮业务飞轮已经开始旋转?

今年6月底登陆港股的药师帮,近日发布了上市后的首份财务报告。 财报显示,2023年上半年,药师帮实现营收增长、经调整后净利润转正的成果,再次验证了二级市场对于其发展潜力的看好——6月底上市以来,药师帮股价涨幅接近…

内存管理(1)

内存管理(1) 1、各类型数据在内存中的存储空间2、C内存管理方式2.1 针对于内置类型分析2.2 针对于自定义类型分析2.3 C语言与C在申请动态内存失败时的区别 3、operator new 和 operator delete函数(重点)3.1 底层知识解析3.2 实现…

基于Javaweb的摄影作品网站/摄影网站

摘 要 随着信息化时代的到来,系统管理都趋向于智能化、系统化,摄影作品网站也不例外,但目前国内的有些网站仍然都使用人工管理,浏览网站人数越来越多,同时信息量也越来越庞大,人工管理显然已无法应对时代的…

【AutoLayout案例3 Objective-C语言】

一、咱们接下来,再把这个案例实现一下 1.要求, 1)在控制器的顶部,有两个UIView,一个是蓝色View,一个是红色View 2)这两个UIView的高度,永远是相等的,蓝色和红色的高度是相等的,都是50 3)红色View和蓝色View,是右对齐的 4)蓝色View,距离父控件的左边、上边、右…

解决 Maven 创建 Spring Boot 项目时出现 “Cannot access alimaven“ 错误的方法

系列文章目录 文章目录 系列文章目录前言一、确认 Maven 配置二、创建 Spring Boot 项目三、修改项目的 Maven 配置四、清除 Maven 本地仓库五、重新构建项目总结前言 Maven 是 Java 项目的构建工具,而 Spring Boot 则是用于快速构建 Spring 应用程序的框架。但有时,在创建 …

C++ string 的用法

目录 string类string类接口函数及基本用法构造函数,析构函数及赋值重载函数元素访问相关函数operator[]atback和front 迭代器iterator容量操作size()和length()capacity()max_sizeclearemptyreserveresizeshrink_to_fit string类对象修改操作operatorpush_backappen…