二级索引:叶子节点中存储主键值,每次查找数据时,根据索引找到叶子节点中的主键值,根据主键值再到聚簇索引中得到完整的一行记录。

问题:

1.相比于叶子节点中存储行指针,二级索引存储主键值会占用更多的空间,那为什么要这样设计呢?

InnoDB在移动行时,无需维护二级索引,因为叶子节点中存储的是主键值,而不是指针。

2.那么InnoDB有了聚簇索引,为什么还要有二级索引呢?

聚簇索引的叶子节点存储了一行完整的数据,而二级索引只存储了主键值,相比于聚簇索引,占用的空间要少。当我们需要为表建立多个索引时,如果都是聚簇索引,那将占用大量内存空间,所以InnoDB中主键所建立的是聚簇索引,而唯一索引、普通索引、前缀索引等都是二级索引。

3.为什么一般情况下,我们建表的时候都会使用一个自增的id来作为我们的主键?

InnoDB中表中的数据是直接存储在主键聚簇索引的叶子节点中的,每插入一条记录,其实都是增加一个叶子节点,如果主键是顺序的,只需要把新增的一条记录存储在上一条记录的后面,当页达到最大填充因子的时候,下一跳记录就会写入新的页中,这种情况下,主键页就会近似于被顺序的记录填满。

若表的主键不是顺序的id,而是无规律数据,比如字符串,InnoDB无法加单的把一行记录插入到索引的最后,而是需要找一个合适的位置(已有数据的中间位置),甚至产生大量的页分裂并且移动大量数据,在寻找合适位置进行插入时,目标页可能不在内存中,这就导致了大量的随机IO操作,影响插入效率。除此之外,大量的页分裂会导致大量的内存碎片。

Explain使用说明:

mysql二级索引_mysql——二级索引(辅助索引)相关推荐

  1. 创建二级索引_Mysql创建索引

    零:文章概要 这篇文章,主要是和大家一起去了解 索引,然后一起使用CREATE INDEX语法给数据库中的表创建一个索引. 一:先拿电话薄做个类比 假如,一个电话薄里面包含了一个城市的所有人的姓名和电 ...

  2. mysql索引 聚集索引_MySql数据库索引-聚集索引和辅助索引

    InnoDB存储引擎索引: B+树索引:不能找到一个给定键值的具体行,能找到的只是被查找数据行所在的页.然后把页加载到内存,在查询所要的数据. 全文索引: 哈希索引:InnoDB会根据表的使用情况自动 ...

  3. mysql高效索引覆盖索引_MySQL高效索引:覆盖索引

    原标题:MySQL高效索引:覆盖索引 作者:踏雪无痕 cnblogs.com/chenpingzhao/p/4776981.html 概念 如果索引包含所有满足查询需要的数据,则该索引称为覆盖索引(C ...

  4. mysql 创建唯一索引_Mysql创建索引

    零:文章概要 这篇文章,主要是和大家一起去了解 索引,然后一起使用CREATE INDEX语法给数据库中的表创建一个索引. 一:先拿电话薄做个类比 假如,一个电话薄里面包含了一个城市的所有人的姓名和电 ...

  5. mysql 堆表_Mysql聚集索引和非聚集索引(堆组织表和索引组织表)

    Mysql聚集索引和非聚集索引(堆组织表和索引组织表) 1.堆组织表(HOT)和索引组织表(IOT)有什么区别? myisam使用的堆组织表(Heap Organize Table, HOT),没有聚 ...

  6. mysql 组合主键索引_mysql 组合索引带主键ID的问题

    场景: mysql 5.7 某表 t_apply_info 上的2个索引,一个组合索引带了 主键字段 ID,另一个是同字段的单列索引 例如: KEY idx_1 (apply_serial_no,id ...

  7. mysql 创建覆盖索引_MySql覆盖索引

    mysql的innodb引擎通过搜索树方式实现索引,索引类型分为主键索引和二级索引(非主键索引),主键索引树中,叶子结点保存着主键即对应行的全部数据:而二级索引树中,叶子结点保存着索引值和主键值,当使 ...

  8. mysql 创建覆盖索引_Mysql覆盖索引 covering index 或者 index coverage

    组合索引 提到组合索引,大家都知道"最左前缀"原则.例如,创建索引 idx_name_age (name,age) ,通常情况下,where age=50 或者 where age ...

  9. mysql会自动建立索引_mysql innodb 索引是自动建立的吗

    ALTER TABLE t1 ADD INDEX(or CREATE INDEX) ALTER TABLE t1 ADD FULLTEXT INDEX ALTER TABLE t1 ADD COLUM ...

最新文章

  1. 《C#精彩实例教程》小组阅读07 -- C#字符与字符串
  2. Spring Boot + Vue + Shiro 实现前后端分离、权限控制
  3. java兩個矩陣相乘_Day12 練習java-矩陣乘法
  4. Xcache3.2.0不支持php7.0.11
  5. 计算机应用基础课程没有期末考试,《计算机应用基础》课程期末考试2009—2010学年第一学期.doc...
  6. 一般将来时语法课教案_英语语法:一般现在时和现在进行时
  7. SpringtBoot+SpringSecurity+Jwt+MyBatis整合实现用户认证以及权限控制
  8. Visual Studio Code 1.8版本添加了Hot Exit、Zen Mode及更多调试选项
  9. 2021 ccpc 哈尔滨 G. Damaged Bicycle 状压 + 期望dp
  10. 你们也只剩下点赞的交情
  11. CRM软件设计评测点与采集测评点
  12. 查看宝塔面板账号密码命令_宝塔面板升级到最新版图文教程
  13. 用友 无法正确解析服务器,用友T3软件登陆软件时提示:“可能无法正确解析服务器名称或者相应的端口被禁用,请尝试输入服务器的IP地址”?...
  14. 28 数组中出现次数超过一半的数字
  15. 几个重要的Linux系统内核文件介绍
  16. 数据库表设计必需元素_HTML5输入,必需,模式,数据列表
  17. python mysql编码_Python和MySql:Unicode和编码
  18. 深度模型压缩技术在智能座舱方案的探索与实践
  19. mysql数据库j电子课件_mysql数据库(学习课件).ppt
  20. DNS 劫持和DNS 污染

热门文章

  1. 强大自己,从学习开始!2020年最有内容的订阅号,每一个都是万里挑一!
  2. 玩转花式截图、录屏——FastStoneCapture使用指南
  3. 学习全基因组测序数据分析2:FASTA和FASTQ
  4. R语言使用ggplot2包使用geom_boxplot函数绘制基础分组箱图(不同分组配置不同的箱体填充色+Brewer调色板)实战
  5. R语言使用ggplot2包使用geom_dotplot函数绘制分组点图(改变分组的次序)实战(dot plot)
  6. Python使用pandas保存csv文件:如果文件存在则只添加内容(append),如果无表则同时写入表头和内容(write)
  7. ValueError: Variable rnn/basic_rnn_cell/kernel already exists, disallowed. Did you mean to set reuse
  8. sklearn构建stacking模型进行堆叠多模型分层级回归分析
  9. 线性支持向量机、线性可分支持向量机、非线性支持向量机是怎么区分的?
  10. 转录本counts,FPKM,TPM相互转化