首页 > 数据库 >mysql技术总结1-索引结构

mysql技术总结1-索引结构

时间:2022-10-19 22:15:51浏览次数:60  
标签:总结 存储 聚簇 索引 innodb mysql 节点

最近把mysql的知识重新梳理了下。分几个点。

  • mysql索引结构
  • mysql查询优化
  • mysql事务
  • mysql架构设计
  • mysql高可用

这篇写一些索引结构。先搞几个问题

1、mysql的存储引擎知道哪几个?--innodb、myisam

2、innodb和myisam有啥区别?

  • 锁的区别。myisam只支持表锁,innodb还支持行锁;
  • 事务支持上,innodb支持,myiasm不支持。
  • 数据文件结构。innodb的索引和数据是一个文件存放。myisam索引和数据但两个文件。同时innodb支持聚簇索引,myisam不支持聚簇索引。

首先存储引擎是表级别的,这个在创建表的时候设定。大部分的业务用的都是innodb。

那innodb支持哪几种结构的索引呢?

1、hash索引:优点在于where条件查找快,缺点在于可能hash冲突,且不适合范围查询

2、b+树:无论是聚簇索引还是二级索引,底层的数据结构都是b+树。

mysql b+树索引的特点:数据都存储在叶子节点,非叶子节点只存储索引数据,整棵树索引存在冗余;叶子节点中索引顺序排列,节点与节点之间由双向指针维护。

 

为什么选用b+树结构,为什么不选择b树呢?b+树有着天然优势

  1. 首先对于b树而言,节点是不冗余的,那么数据需要存储在每个索引之下,这就导致每个几点能够存储的索引数据少很多(mysql的数据按页存储,一页16kb,可以理解为1个节点16kb,如果是b树结构,算一个索引几十b,一行数据1kb,1个几点也只能存储10多个索引数据。但是对于b+树而言,非叶子节点只存储索引,那么一个节点最多就可以存几百个索引。mysql每次读取一个节点(一页数据)的数据到内存,计算下一次该走哪一个子树,使用b+,可以减少很多次io);
  2. b+的叶子节点是双向指针连接的,适合范围查询,而b树在范围遍历的适合,需要回溯,逻辑复杂。

为什么innodb建议创建主键,并且自增类型?

  1. 首先,如果不定义主键,innodb引擎也会给表增加一列隐式列rowid,并且将其构建为聚簇索引。
  2. 聚簇索引和表数据一起构建,如果不是设置自增类型,在索引随机插入的情况下,会导致页分裂,会消耗更多的mysql性能。

 (有时间补充下图)

标签:总结,存储,聚簇,索引,innodb,mysql,节点
From: https://www.cnblogs.com/wzllzw/p/16807897.html

相关文章

  • 2022-10-19 mysql 查询中found_rows没有返回正确的总数据量 limit
    查询语句中使用了limit来进行分页,本打算是1页返回10行数据,满足条件的数据有15条,使用了limit后再用found_rows查总符合数据,却只得到了10条,而不是15条,证明查询语句不严谨。......
  • 10.19总结
    [2022-51nod赛前模拟]csp-s第6套-T1题目描述给出一个n个点m条边的有向图,顶点编号1到n,边的编号为1到m。你可以选择一些边进行反转(即从u到v的边反转后变......
  • Vba中Find方法使用总结(一)
    查找表格中的数据:SubfindNum()Dimi&,j&,dAsDateFori=1To10000Forj=1To50IfCells(i,j)="老石"ThenCells(i,j).Interior.Color=vbRed......
  • springBoot 总结
        这是标准创建boot工程的方式 注意这里使用的是阿里云的url  https://start.aliyun.com/修改服务器端口  自动提示功能消失解决方案    ......
  • 10月19日内容总结——包的使用、软件开发目录规范和常用内置模块
    目录一、包的具体使用二、编程思想的转变三、软件开发目录规范1、bin目录2、conf目录3、core目录4、lib目录5、db目录6、interface目录7、log目录8、readme文件9、requirem......
  • OAuth2知识点总结
    OAuth2是什么?OAuth2是一个授权协议。OAuth2.0框架能让第三方应用以有限的权限访问HTTP服务,可以通过构建资源拥有者与HTTP服务间的许可交互机制,让第三方应用代表资源拥有者......
  • 牛客MySQL真题练习2(180-194)
    统计每款的SPU(货号)数量,并按SPU数量降序排序SELECTstyle_id,COUNT(item_id)ASSPU_numFROMproduct_tbGROUPBYstyle_idORDERBYSPU_numDESC统计实际总销售......
  • MySQL_Navicat备份方案
    l 打开Navicat;l 新建MySQL连接,在高级页签中设置备份文件保存位置:     l 点击工具栏中的“自动运行”,“新建批处理作业”   l 按以下步骤操作: ......
  • 进程间通信7种方式总结
    //linuccommand===>man====>pipe,mkfifo,kill&signal,semget,shmget,msgget,inet_addr//三次握手四次挥手//client==>connectreq,//server==>ack,//client===>ack///......
  • 史上最全的MySQL基础教程(收藏)
    本栏按基础顺序,从零学起,手把手教你学MySQL,详细讲述图解MySQL的基础教程,附带相应的资料和增值项目,您值得收藏!​......