MySQL性能优化的21个最佳实践为查询缓存优化你的查询EXPLAIN

优采云 发布时间: 2021-07-31 06:23

  

MySQL性能优化的21个最佳实践为查询缓存优化你的查询EXPLAIN

  

  爱因斯坦说:“耐心和毅力总会得到回报。”我一直把这句话当成我的座右铭,今年这个座右铭在“我”身上得到了彻底的体现。

  每个程序员都有一个大工厂的梦想,我也不例外。去年面试阿里的时候被MySQL问到了。很多相关问题没有回答,只过了两个就冷了。为面试做了很多准备,采集了很多关于MySQL面试的问题

  MySQL 有哪些特点?用C和C++编写,并经过多种编译器测试,保证源代码的可移植性。支持AIX、FreeBSD、HP-UX、Linux、MacOS、Novell Netware、OpenBSD、OS/2 Wrap、Solaris、Windows等。多种操作系统提供多种编程语言的API。这些编程语言包括C、C++、Python、Java、Perl、PHP、Eiffel、Ruby、Tcl等。支持多线程,充分利用基于CPU资源的SQL查询算法,有效提高查询速度。它可以作为客户端-服务器网络环境中的单独应用程序,也可以作为库嵌入其他软件中以提供多语言支持,常用代码如中文GB 2312、BIG5、日语Shift_JIS等。可用作数据表名和数据列名。提供TCP/IP、ODBC和JDBC等数据库连接方式进行管理和检查,优化数据库操作的管理工具,可处理数千万条记录的大型数据库,进入MySQL的世界

  1、MySQL 21 个性能优化最佳实践

  优化您的查询以进行查询缓存 当只需要一行数据时,请解释您的 SELECT 查询,使用 LIMIT 1 为连接表中的搜索字段构建索引,使用类似类型的示例,并对其进行索引。不要 ORDER BY RAND( ) 避免 SELECT *始终为每个表设置一个 ID。使用 ENUM 而不是 VARCHAR。从 PROCEDURE ANALYSE() 获取建议。尽可能使用 NOT NULL Prepared Statements。无缓冲查询。将 IP 地址保存为 UNSIGNED INT。固定长度的表格会更快更垂直。拆分大的DELETE或INSERT语句,列越小,越快选择合适的存储引擎,选择合适的存储引擎,小心“永久链接”

  

  2、MySQL 面试问题总结

  阿里之前的面试题已经汇总,具体面试题内容整理成文档。这篇文章是针对MySQL系列的,所以下面只展示我第一次面试阿里时被猛烈问的一些MySQL问题。 ,这里是阿里今年面试MySQL时遇到的问题。

  2.1.其他主题(包括答案​​)文档请转发,关注或扫描下方二维码后添加助手vx:yunduoa2019,按照助手指导自行获取

  

  请解释一下关系型数据库的概念和主要特点?请介绍一下关系型数据库的典型产品、特点和应用场景?请详细描述SQL语句分类及对应的代表关键字。什么是 MySQL 多实例以及如何配置 MySQL 多实例?如何加强MySQL安全,请给出具体可行的措施?我错误地执行了 drop 库中的 SQL 语句。我怎样才能完全恢复它?描述MySQL主从复制的原理以及配置主从的完整步骤。 MySQL如何实现双向主从复制并讲解应用场景? MySQL如何实现级联同步并讲解应用场景? MySQL主从复制失败如何解决?

  2.2.MySQL55 你能回答几个面试题目?

  带有 ID 自动递增主键的表。插入17条记录后,删除15、16、17条记录,重启Mysql,插入一条记录,这条记录的ID是18,还是15? Mysql的技术特点是什么?什么是堆表? Mysql服务器的默认端口是什么?与Oracle相比,Mysql有什么优势?如何区分FLOAT和DOUBLE? CHAR_LENGTH 和 LENGTH 的区别?请简述Mysql中InnoDB支持的四种事务隔离级别的名称以及各级别的区别? Mysql中ENUM的用法是什么?如何定义正则表达式? CHAR 和 VARCHAR 有什么区别?列的字符串类型可以是什么?如何获取当前的Mysql版本? Mysql 使用什么存储引擎? Mysql 驱动程序是什么? TIMESTAMP 对 UPDATE CURRENT_TIMESTAMP 数据类型有何作用?主键和候选键有什么区别?如何使用Unix shell登录Mysql? myisamchk 有什么用? MYSQL数据库服务器性能分析的方法命令有哪些?如何控制HEAP表的最大大小? MyISAM 静态和 MyISAM 动态之间有什么区别?什么是联合表?如果一个表有一个定义为 TIMESTAMP 的列,会发生什么?当列设置为 AUTO INCREMENT 时,如果它达到表中的最大值会发生什么?如何找出上次插入期间分配的自动增量?您如何查看为表定义的所有索引? LIKE 语句中的 % 和 _ 是什么意思?如何在 Unix 和 Mysql 时间戳之间进行转换?什么是列比较运算符?我们如何获得受查询影响的行数? Mysql 查询是否区分大小写? LIKE 和 REGEXP 操作有什么区别? BLOB 和 TEXT 有什么区别? mysql_fetch_array 和 mysql_fetch_object 有什么区别?我们如何在mysql中运行批处理模式? MyISAM 表将存储在哪里并提供其存储格式? Mysql中有哪些不同的表?什么是ISAM?什么是 InnoDB? Mysql如何优化DISTINCT?如何将字符输入为十六进制数?如何显示前50行?可以使用多少列来创建索引? NOW() 和 CURRENT_DATE() 有什么区别?使用 CREATE 语句可以创建什么样的对象? Mysql 表中允许有多少个触发器?什么是非标准字符串类型?什么是常用的 SQL 函数?解释一下MYSQL的访问控制列表支持事务吗?在mysql中记录货币用什么字段类型好? MYSQL数据表在什么情况下容易损坏? mysql相关的权限表有哪些? Mysql有哪些锁?

  3、MySQL 性能调优和架构设计

  MySQL基本介绍 MySQL结构组成 MySQL存储引擎介绍 MySQL安全管理 MySQL备份与恢复

  

  影响MySQL Server性能的相关因素 MySQL数据库锁机制 MySQL数据库 查询优化 MySQL数据库 Schema设计性能优化 MySQL Server性能优化 常用存储引擎优化

  

  MySQL 可扩展性设计基本原则 MySQL 复制可扩展性设计 数据分段可扩展性设计 Cache 和 Search.. MySQLCluster 高可用设计思路和解决方案 高可用设计 MySQL 监控 MySQL 架构和历史

  

  与其他数据库系统相比,MySQL 有点不同。它的架构可以应用在多种不同的场景中,起到很好的作用,但也带来了一些选择上的困难。 MySQL 并不完美,但它足够灵活以适应要求苛刻的环境,例如 Web 应用程序。同时,MySQL可以嵌入到应用中,还可以支持数据仓库、内容索引和部署软件、高可用冗余系统、在线事务处理系统(OLTP)等多种应用类型。

  帮助转发,关注或扫描下方二维码后添加助手vx:yunduoa2019,按照助手提示自行获取

  

  服务器性能分析

  

  在我们的技术咨询生涯中,最常遇到的三个与性能相关的服务请求是:如何确认服务器是否已经达到最佳性能状态,找出某条语句执行速度不够快的原因,以及诊断一些间歇性的以及被用户描述为“暂停”、“堆叠”或“卡住”的困难故障。本章将主要回答这三个问题。我们将提供——一些工具和技术来优化整机性能,优化单个语句的执行速度,诊断或解决难以观察的问题(这些问题的用户往往很难知道根本原因,有时甚至很难检测到它的存在)。

  查询性能优化

  

  上一节介绍了如何设计最佳的库表结构以及如何构建最佳索引,这对于高性能至关重要。但是这些还不够——需要对查询进行合理的设计。如果查询写得不好,即使数据库表结构合理,索引合适,也无法达到高性能。

  MySQL 高级功能

  

  MySQL 从5.0 和5.1 版本开始引入了很多高级特性,比如分区、触发器等,对于有其他关系数据库背景的用户来说可能并不陌生。这些新特性吸引了很多用户开始使用MySQL。但是,这些功能的性能需要用户实际使用过才能知道。在这里,我们将向您介绍这些特征在现实世界中的表现,而不是简单地介绍参考手册或易传材料中的数据。

  帮助转发,关注或扫描下方二维码后添加助手vx:yunduoa2019,按照助手提示自行获取

  

  优化服务器设置

  

  这里我们将解释为 MySQL 服务器创建一个可靠的配置文件的过程。这是一个非常曲折的过程,有很多值得关注的有趣点和想法。这几点一定要注意,因为创建好的配置最快的方法不是学习配置项,也不是问应该设置哪些配置项或如何修改,也不是检查服务器行为和询问哪些配置项可以从性能提升开始。

  最好从了解 MySQL 内核和行为开始。那么你就可以利用这些知识来指导 MySQL 的配置。最后,您可以将所需配置与当前配置进行比较,然后纠正重要且有价值的差异。

  帮助转发,关注或扫描下方二维码后添加助手vx:yunduoa2019,按照助手提示自行获取

  复制

  

  MySQL 内置的复制功能是基于 MySQL 构建*敏*感*词*、高性能应用程序的基础。此类应用程序使用所谓的“水平扩展”架构。我们可以通过为服务器配置一个或多个备库1来同步数据。复制功能不仅有利于高性能应用的构建,而且是高可用、可扩展、容灾、备份、数据仓库工作的基础。事实上,可扩展性和高可用性通常是相关的话题,我们将在接下来的三章中详细说明。

  帮助转发,关注或扫描下方二维码后添加助手vx:yunduoa2019,按照助手提示自行获取

  

  可扩展的 MySQL

  

  这里将展示如何构建基于 MySQL 的应用程序,并且随着规模越来越大,它可以变得快速、高效和经济。有些应用程序只适合一台或几台服务器,那么这些应用程序有哪些可扩展性建议?大多数人从不维护超*敏*感*词*系统,通常在主流大公司中无法模仿。使用的策略。本章将介绍这一系列的策略。我们已经建立或协助建立了许多应用程序,包括从单个或少量服务器的应用程序到使用数千台服务器的应用程序。选择合适的策略可以大大节省时间和金钱。 MySQL 经常被批评为难以扩展。在某些情况下,这种观点是正确的,但是如果您选择了正确的架构并很好地实现了它,则可以很好地扩展 MySQL。但是可扩展性并不是一个很好理解的主题,所以让我们梳理一下容易混淆的点。

  帮助转发,关注或扫描下方二维码后添加助手vx:yunduoa2019,按照助手提示自行获取

  

  云端的 MySQL

  

  应用层优化

  如果你花太多时间在提升 MySQL 的性能上,很容易将你的视野局限在 MySQL 本身而忽略用户体验。回顾过去,您可能会意识到,也许 MySQL 已经进行了足够的优化,只占用户看到的响应时间的很小一部分。这时候要注意其他部位。这是一个很好的观点,尤其是对于 DBA,这是正确的做法。但如果不是 MySQL,是什么导致了问题?使用第 3 章中提到的技术,可以通过测量快速准确地给出答案。如果能从头到尾分析应用程序的逻辑过程,一般不难找到问题的根源。有时,即使问题出在 MySQL 上,也可以在系统的其他部分轻松解决。

  备份和恢复

  如果您不提前制定备用计划,您可能会发现自己错过了未来的一些最佳选择。例如,在配置完服务器后,记得应该使用 LVM 以便可以拍摄文件系统的快照,但为时已晚。在为备份配置系统参数时,您可能不会注意到某些系统配置对性能有重要影响。如果没有计划定期做恢复练习,当真正需要恢复的时候,你会发现并不是那么顺利。

  MySQL 用户工具

  MySQL 服务器分发包不收录用于许多常见任务的工具,例如用于监控服务器或比较不同服务器之间数据的工具。幸运的是,Oracle 的商业版提供了一些扩展工具,而 MySQL 活跃的开源社区和第三方公司也提供了一系列工具,减少了“重新发明轮子”的需要。

  总目录

  

  帮助转发,关注或扫描下方二维码后添加助手vx:yunduoa2019,按照助手提示自行获取

  

0 个评论

要回复文章请先登录注册


官方客服QQ群

微信人工客服

QQ人工客服


线