首页 > 数据库 >mysql的索引

mysql的索引

时间:2024-12-11 19:11:02浏览次数:6  
标签:一个 索引 InnoDB mysql 空间 数据 page

为什么要有索引

因为加速查询,快呀!!!这是我回答面试官的第一句话,哈哈。

首先数据是以文件的形式存放在磁盘上面的,每一行数据都有它的磁盘地址。如果
没有索引的话,要从 500 万行数据里面检索一条数据,只能依次遍历这张表的全部数据,直到找到这条数据。

但是有了索引之后,只需要在索引里面去检索这条数据就行了,因为它是一种特殊
的专门用来快速检索的数据结构,我们找到数据存放的磁盘地址以后,就可以拿到数据

在 InnoDB 里面,索引类型有三种

  • 普通(Normal):也叫非唯一索引,是最普通的索引,没有任何的限制。

  • 唯一(Unique):唯一索引要求键值不能重复。另外需要注意的是,主键索引是一
    种特殊的唯一索引,它还多了一个限制条件,要求键值不能为空。主键索引用 primay key
    创建。

  • 全文(Fulltext):针对比较大的数据,比如我们存放的是消息内容,有几 KB 的数
    据的这种情况,如果要解决 like 查询效率低的问题,可以创建全文索引。只有文本类型
    的字段才可以创建全文索引,比如 char、varchar、text 。全文检索的时候可以使用match匹配内容

mysql的存储结构

表空间、段、簇、页、行。

  • 表空间 table space:表空间可以看做是 InnoDB 存储引擎逻辑结构的最高层,所有的数据都存放在表空间中。分为:系统表空间、独占表空间、通用表空间、临时表空间、Undo 表空间。
  • 段 segment:表空间是由各个段组成的,常见的段有数据段、索引段、回滚段等,段是一个逻辑 的概念创建一个索引会创建两个段,一个是索引段:leaf node segment,一个是数据段: non-leaf node segment。索引段管理非叶子节点的数据。数据段管理叶子节点的数据。 也就是说,一个表的段数,就是索引的个数乘以2。
  • 簇 Extent:一个段(Segment)又由很多的簇(也可以叫区)组成,每个区的大小是 1MB(64 个连续的页)。每一个段至少会有一个簇,一个段所管理的空间大小是无限的,可以一直扩展下去, 但是扩展的最小单位就是簇
  • 页 Page:

    为了高效管理物理空间,对簇进一步细分,就得到了页。簇是由连续的页(Page) 组成的空间,一个簇中有 64 个连续的页。 (1MB/16KB=64)。这些页面在物理上和 逻辑上都是连续的。
    跟大多数数据库一样,InnoDB 也有页的概念(也可以称为块),每个页默认 16KB。 页是 InnoDB 存储引擎磁盘管理的最小单位,通过 innodb_page_size 设置。
    一个表空间最多拥有 2^32 个页,默认情况下一个页的大小为 16KB,也就是说一个 表空间最多存储 64TB 的数据。

注:page是操作系统的叫法,在硬件中被称为块。
SHOW VARIABLES LIKE 'innodb_page_size'; 查看innodb的page_size;

B+Tree

标签:一个,索引,InnoDB,mysql,空间,数据,page
From: https://www.cnblogs.com/euler-blog/p/18600512

相关文章

  • mysql的个人习惯
    一定要有主键一般使用的innodb引擎中会根据主健创建聚簇索引,这种方式会使得数据排列的更连续,减少随机IO关于数据长度考虑数据范围,够用的前提下,数据长度是越简单越好,数据类型是越小越好。尽量避免使用TEXT/BLOB类型datapage默认是16kb,每行数据长度超过8kb就会出现d......
  • Mysql学习-Mysql查询(3)
    一.补充概念1.强化概念:1).DB:数据库,保存一组有组织的容器,即存储数据的容器2).DBMS:数据库管理系统,又称为数据库软件(产品),用于管理DB中的数据,又称为数据库软件或数据库产品,用于创建或管理DB.3).SQL:结构化查询语言,用于和DBMS通信的语言2.SQL语言的分类:SQL语言......
  • Mysql之innodb引擎
    优势总结只有数据库引擎为innodb且事务的隔离级别repeatable——read(可重复读)的时候才会使用mvcc来实现多版本控制事务中的可重复读可以有效的避免幻读问题innodb从硬盘上读取数据的时候,会读取一整页的数据,然后加载到内容中,在内存中创建hash索引,从而提高读操作的效率。inno......
  • 一文看懂MySQL索引下推(ICP)
    文章目录一、索引下推是什么?二、回表查询(TableLookup)是什么?聚集索引和非聚集索引如何减少回表查询?小结三、索引下推如何减少回表查询次数1.没有使用icp(索引下推)2.使用ICP四、总结索引下推的工作原理1.传统的查询处理方式:2.索引下推优化:五、索引下推的优点六、......
  • A5433 Java+Jsp+Servlet+MySQL+微信小程序+LW+在线点餐小程序的设计与实现 源码 配置
    在线点餐小程序的设计与实现1.摘要2.开发目的和意义2.1系统开发目的2.2系统开发意义3.系统功能设计4.系统界面截图5.源码获取1.摘要摘要近几年,人们生活水平日益提升,但工作强度和压力不断增强,尤其是对于上班族而言,到餐厅吃饭费时费力,而传统的APP点餐难以适应针对......
  • MySQL学习笔记Day6
    一、存储过程存储过程是事先经过编译并存储在数据库中的一段SQL语句的集合,调用存储过程可以简化应用开发人员的很多重复的工作,提高数据处理的效率。1、特点(1)封装、复用(2)可接收参数(3)减少网络交互,提高效率2、语法结构delimiter$$ --设置sql语句以$$结束CREATE......
  • 第一部分:基础知识 9 . 视图 --[MySQL轻松入门教程]
    在MySQL中,视图(View)是一个命名的SQL查询,它被存储在数据库目录中。视图可以包含来自一个或多个表的数据,并且可以像真实表一样被查询。下面是对MySQL视图的详细讲解:创建视图使用CREATEVIEW语句来创建视图。语法如下:CREATE[ORREPLACE][ALGORITHM={UNDEFINED|MERGE......
  • 【python脚本】python读取csv文件发送数据到kafka,然后再从kafka消费到mysql中
    前置条件pipinstallpandasconfluent-kafkamysql-connector-pythonpymysql读取csv文件到kafkaimportpandasaspdfromconfluent_kafkaimportProducerimportjsonimportcsv#配置Kafka生产者#topic名称csv_topickafka_topic='csv_topic'kafka_broker=......
  • MySQL索引
      2.1索引概述2.1.1介绍索引(index)是帮助MySQL高效获取数据的数据结构(有序)。在数据之外,数据库系统还维护着满足特定查找算法的数据结构,这些数据结构以某种方式引用(指向)数据,这样就可以在这些数据结构上实现高级查找算法,这种数据结构就是索引。在无索引情况下,就需要从......
  • MySQL执行计划字段解析
    MySQL执行计划是通过`EXPLAIN`或`EXPLAINANALYZE`命令生成的,它提供了SQL查询的执行信息,帮助我们分析和优化查询性能。以下是执行计划中各个字段及其含义的详细解释:1.**id**:QueryOptimizer所选定的执行计划中查询的序列号。如果多个行有相同的ID,它们属于同一个查询的一部分,并且......