DAY06 - MySQL索引优化

基础章节-01-MySQL数据库服务中级课程 1.00 课程知识章节说明 目前在互联网的实际应用中,各个企业都会比较关注自身网站的数据信息,既要保证数据信息的安全性,同时也要保证数据存储读取效率 并且在特殊的场景下,还要对存储的数据信息进行检索和分析;因此数据库服务业务已经在各行各业应用非常的广泛 对于互联网领域的技术人员,对于数据库服务知识的掌握,也将是在求职时必备的技能,有些时候还会绝对入职的定级和薪资水平。 1.07 数据库服务索引知识 1.7.1 数据库索引相关概念 索引概念介绍: 索引是数据库中用来提高数据读取性能的常用工具,所有mysql列类型都可以被索引,对相关列使用索引; 可以是提高select操作性能的最佳途径,可以尽可能快的锁定要查询数据的范围,从而达到加速查询的目的(减少IO消耗); 一般索引设置都是应用在比较大的数据表上,比如百万级别、千万级别或亿级别的数据表中,从而完成一些针对性优化; 可以简单理解:数据库索引相当于书的目录,可以借助索引有针对的查看相应数据的信息,避免了全盘检索带来的工作量; 主要利用MySQL中的索引,可以快速锁定查询范围,mysql索引比较适合范围查找数据; 1.7.2 数据库索引类型介绍 在MySQL数据库服务中,是有很多种索引类型的,但是比较常用的索引类型主要有: 序号 类型 说明 B+Tree 类型01 默认类型索引 类型02 Hash 算法类型索引 类型03 R+Tree 空间类型索引 类型04 Fulltext 全文类型索引 数据库数据查找算法演变:(B+Tree索引的由来) 这个举个简单的例子,假设现在一个教室中有100来号人,这时可以派发礼品,通过礼品引诱这100人来报名学习xiaoQ老师课程; 比如礼品是学习课程的1000元代金券,现在把这1000元的代金券随机放到了1到100号盒子其中的一个里面,只有我知道放置的号码; 下面要求这100个人尽量快的猜到1~100号盒子里面,哪个有放置代金券的盒子,当然,我会给予一些合适的提示信息; 这时在场的100号人就需要想一些办法,在我合适的配合下,定位有代金券的盒子,想的办法就等价于是查找算法: 方法一:根据定位的盒子编号顺序,询问是与否,这种方式就可以理解为是遍历算法(全扫描),也可以理解为随机性算法; 方法二:根据定位的盒子编号比较,询问大于小,这种方式就可以理解为是二分算法(定范围),也可以理解为二叉树算法; 看似这种二分算法比遍历算法,更加科学,但是如果代金券放在了第01号或第100号盒子里呢,或者二分节点两侧时呢? 所以采用二分法依然会存在数据查询不平衡的问题。 通过以上两种算法的介绍,了解到都存在一些缺陷或问题,因此数据库在检索数据信息时,最终采用的算法是B+Tree,其中的B表示平衡 并且BTREE还可以细分为B-tree或B+tree,以及B++tree,其中的加号就是表示增强版或优化版的BTree; 在讲解B+树之前先了解一下树的整体结构,无非就是二叉树、二叉搜索树、平衡二叉树,更高级一点的有红黑树、Btree、B+tree等; 而树的查找性能取决于树的高度,让树尽可能平衡是为了降低树的高度。 为什么MySQL会选用B+树的结构,可以先来看看其他的树形结构: 二叉树: 二叉树的每一个节点都只有两个子节点,当需要向其插入更多的数据的时候,就必须要增加树的高度,而增加树的高度会导致IO消耗大; 对于二叉树而言,它的查找操作的时间复杂度就是树的高度,树的高度越高查询性能就会随着数据的增多越来越低。 二叉树节点中,还存在非正常的倾斜(比如ID自增的情况)的二叉树,查询一次数据就相当于全表搜索,因此二叉树的查询性能特别差 红黑树: 红黑树一种平衡二叉树,它复杂的定义和规则都是为了保证树的平衡性; 对于B++tree算法的底层算法逻辑理解: 利用Btree算法还是快速锁定100个盒子中,有代金券的盒子编号,如下图所示: 将需要存储的数据信息,均匀分配保存到对应页当中,最终数据信息的均匀存储(落盘) 根据页节点存储的数据信息,取出页节节点最小数据信息,并将每个叶节点最小数据信息进行汇总整合,生成相应内部节点数据; 实质上存储的是下层页节点的区间范围,以及与之对应的指针信息,最后构建出内部节点信息; 根据内部节点存储的数据信息,取出内部节点最小数据信息,并将每个内部节点最小值信息进行汇总整合,生成相应根节点数据; 根节点只能有占用一个页区域,如果一个页区域空间不够,需要进行内部节点层次扩展,但是尽量要保证层次越少越好; 实质上存储的是下层内部节点的区域范围,以及与之对应的指针信息,最后构建出独立且唯一的根节点信息; 整个树形结构,越向上节点存储数据的范围越大,然后依次再分发数据到下面的小范围,最终形成多叉树; 由于出现了多叉树,就表示全部数据分布在多个链表上,避免了单条链表存储数据,同时可以实现并发的访问数据 对于加号表示增强,其中增强表示在整个链表上,增加了同级相邻节点之间的双向指针,从而实现相邻节点相互跳转 根据以上B+Tree的结构说明,假设现在需要查找54这个数据值信息所在的数据页:等值查询 根据定义查找的数值信息,首先在根节点中获取数值所在的区间范围和相应指针信息,从而找到下层对应的内部节点信息; 根据定义查找的数据信息,其次在枝节点中获取数值所在的区域范围和相应指针信息,从而找到下层对应的叶子节点信息; 根据定义查找的数据信息,最后在叶子节点中获取最终的数据信息,结果结合上图经历三步完成了数据查找(3*16=48kB); 在利用BTree查找数据信息时,会结合树形层次结构,来决定查询数据的步骤过程,并且理论上每个数据查找过程步骤相同; ...

2026年1月6日 · 11 分钟 · DBA Student

DAY12 - MySQL性能调优

基础章节-01-MySQL数据库服务中级课程 1.00 课程知识章节说明 目前在互联网的实际应用中,各个企业都会比较关注自身网站的数据信息,既要保证数据信息的安全性,同时也要保证数据存储读取效率 并且在特殊的场景下,还要对存储的数据信息进行检索和分析;因此数据库服务业务已经在各行各业应用非常的广泛 对于互联网领域的技术人员,对于数据库服务知识的掌握,也将是在求职时必备的技能,有些时候还会绝对入职的定级和薪资水平。 1.15 数据库服务冗余架构 1.15.1 数据库服务高可用前言介绍 数据库中的高可用功能,主要是用于避免数据库服务或数据信息的损坏问题,其中数据损坏的类型有: 数据物理损坏:磁盘、主机、程序实例、数据文件误删除 数据逻辑损坏:drop update … 其中,数据库高可用技术的出现主要解决的是数据逻辑损坏问题,而主从架构技术主要解决的是数据物理损坏问题; 数据库高可用解决方案选型依据:(全年无故障率) 无故障率 故障时间解决方案 99.9% 0.1%(525.6min)keepalived+双主架构,但需要人为干预 MHA ORCH TMHA,具有自动监控,自动切换,自动数据补偿,但还是属于半自动化 99.99% 0.01%(52.56min) 比较适合非金融类互联网公司 eg: facebook taobao前端-TMHA–>polaradb PXC MGR MGC,数据是高一致性 99.999% 0.001%(5.256min) 比较适合金融类互联网公司 99.9999% 0.0001%(0.5256min)自动化、云计算化、平台化,仍然属于概念阶段 1.15.2 数据库服务高可用软件介绍 MHA(Master High Availability)目前在MySQL高可用方面是一个相对成熟的解决方案,它由日本DeNA公司youshimaton研发, 此人目前就职于Facebook公司,MHA是一套优秀的作为MySQL高可用性环境下故障切换和主从提升的高可用软件。 MySQL进行故障切换过程中,MHA能做到在0~30秒之内自动完成数据库的故障切换操作,并且在进行故障切换过程中; MHA能在最大程度上保证数据的一致性,以达到真正意义上的高可用。 MHA主要有两部分组成: MHA Manager(管理节点) 可以单独部署在一台独立的机器上管理多个master-slave集群,也可以部署在一台slave上。 MHA Node(数据节点) 运行在每台MySQL服务器上 MHA Manager 会定时探测集群中的master节点,当master出现故障时,它可以自动将最新数据的slave提升为新的master; 然后将所有其他的slave重新指向新的master,整个故障转移过程对应用程序是完全透明的; MHA软件结构介绍:(MHA中的所有组件就是perl语言编写的功能脚本) 节点信息 软件组件 作用介绍 MHA Manager(管理节点 )masterha_manger 用于启动MHA masterha_check_ssh 用于检查MHA的SSH配置互信状况 masterha_check_repl 用于检查MySQL复制状态,以及配置信息 masterha_master_monitor 用于检测master是否宕机 masterha_check_status 用于检测当前MHA运行状态 masterha_master_switch 用于控制故障转移(自动或者手动) masterha_conf_host 添加或删除配置的server信息 MHA Node(数据节点) save_binar y_logs 保存和复制master的二进制日志 apply_diff_relay_logs 识别差异的中继日志事件并将其差异的事件应用于其他slave purge_relay_logs 清除中继日志(不会阻塞SQL线程) 1.15.3 数据库服务高可用环境构建 ① MHA高可用架构基础环境: 为了实现MHA高可用架构构建,需要准备好三节点数据库+GTID复制环境: ...

2026年1月12日 · 45 分钟 · DBA Student