MySql8的那些不为人知的秘密揭晓

前言

        MySQL 8.0 是MySQL数据库的一个重大版本更新,带来了许多改进和新功能。以下是MySQL 8.0的一些主要改进:

  1. 事务控制:引入了原子性、一致性、隔离性和持久性(ACID)的事务支持。该版本的MySQL引入了新的事务日志存储引擎(InnoDB),提供了更好的性能和并发处理能力。

  2. 存储引擎:引入了一种新的默认存储引擎(InnoDB),该引擎提供了更好的性能和可靠性。同时,还添加了一些新的存储引擎选项,例如,MyRocks引擎,它针对大型数据集进行了优化。

  3. SQL语法:引入了许多新的SQL功能和语法,包括窗口函数、递归支持、JSON支持等。这些新功能使开发人员能够更方便地处理复杂的数据操作和查询。

  4. 安全性:增强了安全性功能,包括密码加密、身份验证和授权的改进,以及新的安全功能,如用户管理、安全连接等。

  5. 性能优化:对查询优化进行了改进,并引入了新的索引算法,以提高查询性能。还改进了并发处理和锁定机制,以提高多用户并发访问的性能。

  6. JSON支持:引入了对JSON数据类型的支持,并提供了一些新的JSON函数,使得存储和查询JSON数据更加方便。

  7. Unicode支持:增强了对Unicode字符集的支持,包括新的字符集和排序规则。

  8. 复制功能:改进了复制功能,并引入了新的复制过滤器,允许对复制事件进行更细粒度的控制。

  9. 监控和管理:引入了新的监控、诊断和管理功能,使得管理员能够更好地监控数据库性能和健康状况。

        这只是MySQL 8.0的一些主要改进,还有其他一些改进和新功能,旨在提高数据库的性能、可靠性和可用性。那么我们接下来看看在MySQL 8中,性能优化体现在以下哪些方面?

一、查询优化

        MySQL 8引入了Cost-Based Optimizer(CBO),它可以根据表的统计信息和查询的复杂性来选择最佳执行计划,从而提升查询的性能。

  1. 使用合适的索引:索引是提高查询性能的重要手段。合适的索引可以减少数据的扫描量,提高查询速度。在选择索引时,考虑到查询的条件和排序方式,选择合适的索引字段。同时,避免创建过多的索引,因为索引也会带来额外的存储和更新开销。

  2. 优化查询语句:优化查询语句的方式有很多,包括减少不必要的列、避免使用通配符查询、使用JOIN替代子查询等。另外,避免在WHERE子句中对列进行函数操作,这样会导致无法使用索引。

  3. 使用查询缓存:查询缓存可以缓存查询的结果,减少数据库的查询压力。但在MySQL 8 中,查询缓存已被弃用,因为它对于高并发的环境来说,效果不明显。

  4. 使用分区表:MySQL 8 支持分区表,可以将数据按照某种规则分散到多个表中,提高查询性能。分区表可以根据数据的范围、列表、哈希等进行分区。

  5. 使用存储过程和触发器:存储过程和触发器可以在数据库层面进行操作,避免频繁的网络传输和客户端连接,提高查询性能。

  6. 优化数据库配置:合理配置数据库的参数,如线程池大小、缓冲区大小等,可以提高查询性能。

  7. 监控和调优:使用MySQL的性能监控工具,如Explain,InnoDB Monitor等,可以对查询进行监控和分析,找出慢查询和性能瓶颈,进行相应的调优。

二、索引优化

        MySQL 8支持更多类型的索引,如哈希索引、自适应哈希索引等。这些索引类型可以提升查询的速度和效率。

  1. 分析查询:首先,需要仔细分析查询语句的执行计划。可以使用EXPLAIN命令来查看查询语句的执行计划,看看MySQL是如何处理查询的。根据执行计划中的信息,可以判断查询是否有效使用了索引。

  2. 创建适当的索引:根据查询的分析结果,可以确定是否需要创建新的索引来优化查询性能。可以考虑将经常用于查询条件的列作为索引列。在创建索引时,还需要注意不要过度索引,因为过多的索引可能会导致性能下降。

  3. 维护索引的统计信息:MySQL使用索引统计信息来决定如何执行查询。可以使用ANALYZE TABLE命令或OPTIMIZE TABLE命令来更新索引的统计信息,以确保MySQL具有最新的统计信息。

  4. 使用合适的索引类型:MySQL提供了多种类型的索引,如B-Tree索引、哈希索引和全文索引等。根据实际情况选择合适的索引类型。例如,B-Tree索引适用于范围查询,而哈希索引适用于等值查询。

  5. 避免索引失效:在查询语句中,应该避免使用不会使用索引的操作符。例如,LIKE操作符的前导通配符无法使用索引,因此应该尽量避免使用。

  6. 定期优化表结构:随着数据库的使用,表可能会变得庞大并且索引可能会变得不够有效。定期优化表结构,可以通过重新创建表或重建索引来提高查询性能。

  7. 监控和调整索引性能:定期监控数据库的性能,并根据需要进行调整。可以使用MySQL的性能分析工具和监控工具来帮助识别性能问题,并采取适当的措施来优化索引性能。

三、并行查询

        MySQL 8引入了并行查询执行的功能,在执行复杂查询时可以并行处理多个任务,提高查询的速度。

        MySQL 8.0引入了一些新的功能,可以进行并行查询。这些功能主要包括并行查询执行和并行查询计划。

        并行查询执行在MySQL 8.0中是默认启用的。它使用多个线程来同时执行查询操作,以加快查询速度。并行查询执行可以应用于一些特定的查询操作,例如联接操作、排序操作和分组操作。要启用并行查询执行,可以设置全局系统变量parallel_query的值大于1。

        并行查询计划是MySQL 8.0中的另一个功能。它允许MySQL在查询优化阶段生成并行执行计划,并在执行查询时使用这个计划。使用并行查询计划可以提高查询性能,特别是在处理大规模数据集时。要启用并行查询计划,可以设置会话系统变量optimizer_switch的值为'parallel_execution'

        需要注意的是,并行查询并不适用于所有类型的查询操作。一些查询操作可能无法并行化,或者在并行化时可能导致性能下降。因此,在使用并行查询之前,应该仔细评估查询操作的特点,以确定是否适合使用并行查询。同时,要监控并行查询的性能和资源消耗情况,以保证系统的稳定性和可靠性。

四、缓存优化

        MySQL 8引入了更先进的查询缓存,可以有效地减少数据库的访问次数,并提高查询的性能。

        MySQL 8的缓存优化可以通过以下几种方式实现:

  1. 使用合适的缓存大小:在MySQL的配置文件中,可以通过设置innodb_buffer_pool_size参数来调整InnoDB缓存池的大小。将缓存大小设置为适合数据集大小的值可以提高查询性能。

  2. 合理配置缓存策略:MySQL 8引入了新的查询缓存策略,称为“InnoDB主动查询缓存”。这种缓存策略使用了一个缓存状态表来跟踪缓存的命中率和效率。通过合理配置查询缓存策略,可以提高缓存的命中率和查询性能。

  3. 使用索引:索引可以加快数据的查找和过滤,提高查询性能。在设计数据库表结构时,可以根据查询的需求来创建合适的索引。

  4. 使用查询缓存:MySQL 8的查询缓存可以缓存查询的结果,如果相同的查询再次执行,可以直接从缓存中获取结果,而不需要再次执行查询语句。通过启用查询缓存,可以提高查询性能。

  5. 查询优化:通过优化查询语句,可以减少数据库的负载和提高查询性能。可以使用EXPLAIN命令来分析查询语句的执行计划,并进行相应的优化。

  6. 使用分区表:MySQL 8引入了分区表的概念,可以将大表分成小的逻辑片段,可以提高查询性能。根据查询的需求,可以选择合适的分区策略,并通过分析分区表的性能来调整。

五、优化器改进

        MySQL 8对查询优化器进行了一系列改进,如优化数据访问模式、优化连接操作、优化子查询等,提高了查询的效率和性能。

        MySQL 8的优化器改进主要包括以下几个方面:

  1. 查询重写优化:MySQL 8的优化器引入了新的查询重写规则,可以更有效地重写查询语句。这些规则基于查询的语义和统计信息,能够将查询转换为效率更高的形式。

  2. 全新的执行计划生成器:MySQL 8的优化器使用了全新的执行计划生成器,能够更准确地估计查询的成本,并生成更优化的执行计划。这个新的执行计划生成器采用了成本优化的方法,可以考虑多种因素,如索引选择、连接顺序等。

  3. 并行查询优化:MySQL 8的优化器增加了对并行查询的支持,能够将一个查询分解成多个并发执行的子查询,从而加快查询速度。这个优化特性对于多核处理器的系统特别有用,可以利用多个CPU核心同时处理查询。

  4. 自适应查询优化:MySQL 8的优化器引入了自适应查询优化的功能,可以根据执行计划的实际性能和查询统计信息来自动调整执行计划,以提高查询的性能。

        MySQL 8的优化器改进了查询重写、执行计划生成、并行查询和自适应查询等方面,能够生成更优化的执行计划,提高查询性能。用户可以从这些改进中获得更高的查询效率和更好的用户体验。

六、存储引擎改进

        MySQL 8对InnoDB存储引擎进行了一系列优化,包括多线程写入、自适应哈希索引、在线DDL等,提升了存储引擎的性能和可靠性。

        MySQL 8中引入了一些重要的存储引擎改进,包括以下几个方面:

  1. InnoDB引擎优化:InnoDB是MySQL的默认存储引擎,MySQL 8中对其进行了一些优化,包括并行查询支持、多线程读取、自适应哈希索引和锁调优等。这些改进可以提高InnoDB引擎的性能和并发处理能力。

  2. MyRocks存储引擎:MyRocks是一个基于RocksDB存储引擎的MySQL存储引擎。它在存储和压缩方面的效率更高,可以节省磁盘空间和提高查询性能。MySQL 8中正式引入了MyRocks作为一种可选的存储引擎。

  3. 更好的JSON支持:MySQL 8提供了更好的JSON数据类型支持,包括JSON数据验证、搜索和索引。这使得存储和查询JSON数据更加方便和高效。

  4. 更好的全文搜索支持:MySQL 8引入了全文索引的改进,包括支持更多语言和字符集、提供更好的搜索结果排序和相关性评分等。

  5. 更好的时间序列数据支持:MySQL 8引入了新的时间序列数据类型,包括DATETIME(6)和TIME(6),可以更精确地存储和查询时间数据。

        MySQL 8中的存储引擎改进主要集中在提高性能、减少存储空间占用和提供更好的数据类型支持等方面。这些改进使得MySQL 8更加适合处理大规模数据和高并发访问的应用场景。

        MySQL 8在查询优化、索引优化、并行查询、缓存优化、优化器改进和存储引擎改进等方面都进行了一系列的优化,使得数据库的性能得到了显著的提升。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/303307.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Mysql大数据量下流式查询优化:Jdbc中的useFetchSize参数及其原理解析

前言 最近我朋友公司有个需求场景:查询千万级数据量并写入txt文件的程序优化需求。 朋友找到我对程序进行优化, 不然饭碗不保......💦 下面就分享一下解决这个优化问题的过程和思路,并总结一下,在以后不要在踩同样的坑…

4.4 TILING FOR REDUCED MEMORY TRAFFIC

我们在CUDA中使用设备内存方面有一个内在的权衡:全局内存大但速度慢,而共享内存小但速度快。一个常见的策略是将数据划分为称为tile的子集,以便每个tile都适合共享内存。tile一词”借鉴了一个类比,即大墙(即全局内存数…

基于协同过滤推荐的购物系统

介绍 本购物系统是一个基于协同过滤推荐算法的电商平台,使用 Python Django 框架、Django-simpleui 前端框架和 Vue、Element-Plus UI 组件库构建而成。该系统可根据关键词、分类等搜索筛选商品,并提供了个性化推荐功能,根据用户的历史订单、…

linux日志管理

一.inode与block 访问文件的流程: 根据文件夹的文件名和inode号,找到对应的inode表,再根据inode表的指针找到磁盘上的真实数据 tips:我磁盘空间还剩很多,但是无法建立文件? 因为inode号被分完了 解决方法&a…

交通银行网上支付接口调用测试实例

公司最近有一个网站商城项目要开始开发了,这几天老板和几个同事一起开着需求会议, 讨论了接下来的业务规划和需求策略,等技术需求一下来还要讨论技术需求, 确认后再慢慢的进入开发阶段,趁着闲暇时间新造的人想总结一…

C语言中常用的字符串函数(strlen、sizeof、sscanf、sprintf、strcpy)

C语言中常用的字符串函数 文章目录 C语言中常用的字符串函数1 strlen函数2 sizeof函数2.1 sizeof介绍2.2 sizeof用法 3 sscanf函数3.1 sscanf介绍3.2 sscanf用法3.3 sscanf高级用法 4 sprintf函数4.1 背景4.2 sprintf用法 5 strcpy函数5.1 strcpy介绍5.1 strcpy用法 1 strlen函…

算法第十四天-删除有序数组中的重复项

删除有序数组中的重复项 题目要求 解题思路 双指针 左指针确定不重复值,右指针遍历数组 代码 class Solution:def removeDuplicates(self, nums: List[int]) -> int:left0for right in range(1,len(nums)):if nums[left] ! nums[right]:left 1nums[left] nu…

【问题】SpringBoot项目中log4j与logback的Jar包冲突问题

这篇文章主要给大家介绍了解决SpringBoot项目中log4j与logback的Jar包冲突问题,文中有详细的解决方法和冲突的原因。 SLF4J: Class path contains multiple SLF4J bindings. SLF4J: Found binding in [jar:file:/C:/Users/lx/.m2/repository/org/slf4j/slf4j-log4j12/1.7.25/sl…

【工具】推荐一个好用的代码画图工具

PlantUML 官网地址:https://plantuml.com/zh/ 跳转 支持各种结构化数据画图支持代码调用jar包生成图片 提供在线画图能力 https://www.plantuml.com/plantuml/uml/SyfFKj2rKt3CoKnELR1Io4ZDoSa70000 有兴趣可以尝试下 over~~

20.Activity跳转时的参数传递

(1).如何传递数据 (2).如何接收数据 (3).如何回传数据

消息队列-RockMQ-批量收发实践

批量收发实战 发送消息是需要网络连接的如果我们单条发送吞吐量可能没有批量发送好。剖来那个发送可以减少网络IO开销,但是也不能一批次发送太多的数据,需要根据每条消息的大小和网络带宽来确定量的数目。 比如网络带宽为可以支持一次性发送8M的数据包&…

工业异常检测AnomalyGPT-Demo试跑

写在前面:如果你有大的cpu和gpu可以使用,直接根据官方的安装说明就可以,如果没有,可以点进来试着看一下我个人的安装经验。 一、试跑环境 NVIDIA4090显卡24g,cpu内存33G,交换空间8g,操作系统ubuntu22.04(试跑过程cpu…

OCP NVME SSD规范解读-5.命令超时限制

在"4.7 Command Timeout"章节中,详细定义了NVMe命令的超时要求和限制。 CTO-1:NVMe管理命令和TCG(可信计算组)命令从提交到完成不应超过10秒,且没有其他命令未完成(QD1)。CTO-1不适用…

九州金榜|家庭教育小技巧如何培养优秀孩子

信任和期望可以激发孩子的智商和能力,孩子是否出色,取决于家长们如何去“套路”去“培养”。 优秀的孩子不是逼出来的,而是被父母套路出来的,引导孩子找到自我价值感,才是家庭教育中最重要的一课! 曾经看…

Python自动化办公之PDF拆分

今天我们继续分享真实的自动化办公案例,希望各位 Python 爱好者能够从中得到些许启发,在自己的工作生活中更多的应用 Python,使得工作事半功倍! 需求 需要从 PDF 中取出几页并将其保存为新的 PDF,为了后期使用方便&a…

21. Mysql 事件或定时任务,解放双手,轻松实现自动化

文章目录 概念常见操作事件调度器操作查看事件创建事件删除事件启动与关闭事件 精选示例构造实时数据定时统计数据 总结参考资料 概念 Mysql 事件是一种在特定时间点自动执行的数据库操作,也可以称呼为定时任务,它可以自动执行更新数据、插入数据、删除…

FileStream文件管理

文件管理 FileStream:是一个用于读写文件的一个类。它提供了基于流的方式操作文件,可以进行读取、写入、查找和关闭等操作。 第一个参数:path(路径) 相对路径:相对于当前项目的bin目录下的Debug和Realse来…

金蝶EAS pdfviewlocal 任意文件读取漏洞复现

0x01 产品简介 金蝶EAS 为集团型企业提供功能全面、性能稳定、扩展性强的数字化平台,帮助企业链接外部产业链上下游,实现信息共享、风险共担,优化生态圈资源配置,构筑产业生态的护城河,同时打通企业内部价值链的数据链…

Android Matrix (三)矩阵组合和应用变换

在 Android 开发中,Matrix 类不仅提供了 mapPoints 方法来变换点坐标,还提供了多种其他用法,使其成为处理图像和视图变换的强大工具。以下是 Matrix 类的一些关键用法: 1. 变换方法 setTranslate(float dx, float dy): 设置矩阵…

Qt/QML编程学习之心得:一个音频播放器的实现(29)

在window下,打开音乐播放器,然后打开一个.mp3文件,就可以实现播放了,那么在Qt/QML中如何实现呢?首先所有的设计都是基于音乐播放器的,嵌入式linux下同样也有音乐播放器,比如mplayer。其调用方法…