Go语言八股文之Mysql优化

发布于:2025-05-20 ⋅ 阅读:(16) ⋅ 点赞:(0)

   💝💝💝欢迎来到我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。



非常期待和您一起在这个小小的网络世界里共同探索、学习和成长。💝💝💝 ✨✨ 欢迎订阅本专栏 ✨✨
 

前言

小郑最近在准备Go语言的面试题,通过github和b站等各种学习网站上学习go语言的八股文,并且整理出自己觉得面试可能会问到的知识点,希望通过做笔记的方式来巩固自己的知识点,并且也希望可以帮助到大家在面试的时候更加得心应手一些,那么从现在开始,和我一起加入八股学习之旅吧!

1. 如何定位及优化SQL语句的性能问题?

对于低性能的SQL语句的定位,最重要也是最有效的方法就是使用执行计划,MySQL提供了explain命令来查看语句的执行计划。对于查询语句,最重要的优化方式就是使用索引。 而执行计划,就是显示数据库引擎对于SQL语句的执行的详细情况,其中包含了是否使用索引,使用什么索引,使用的索引的相关信息等。

2.Mysql超大分页怎么处理

3.大表数据查询,怎么优化

4.统计过慢查询吗?对慢查询都怎么优化过?

5. 如何优化查询过程中的数据访问

  • 查询不需要的数据。 解决办法:使用limit解决
  • 多表关联返回全部列。 解决办法:指定列名
  • 总是返回全部列。 解决办法:避免使用SELECT *
  • 重复查询相同的数据。 解决办法:可以缓存数据,下次直接读取缓存

  • 是否在扫描额外的记录。
  • 解决办法:使用explain进行分析,如果发现查询需要扫描大量的数据,但只返回少数的行,可以通过如下技巧去优化:使用索引覆盖扫描,把所有的列都放到索引中,这样存储引擎不需要回表获取对应行就可以返回结果。

  • 数据库设计不合理,比如冗余数据太多,或者数据表设计不符合范式要求,可能导致查询性能差。
  • 解决方法:改变数据库和表的结构,修改数据表范式

有些SQL语句写法不合理,可能导致查询性能低下。

解决方法:重写SQL语句,让优化器可以以更优的方式执行查询。

6.MySQL数据库cpu飙升到500%的话他怎么处理?

排查过程:

(1)使用top命令观察,确定是mysqld导致还是其他原因。

(2)如果是mysqld导致的,show processlist,查看session情况,确定是不是有消耗资源的sql在运行。

(3)找出消耗高的sql,看看执行计划是否准确,索引是否缺失,数据量是否太大。

处理:

(1)kill掉这些线程(同时观察cpu使用率是否下降),

(2)进行相应的调整(比如说加索引,改sql,改内存参数)

(3)重新跑这些sql.

其他情况:

有可能是每个sql消耗资源并不多,但是突然之间,有大量的session连进来导致cpu飙升,这种情况就需要跟应

用一起来分析为何连接数会激增,再做出相应的调整,比如说限制连接数等。

7.mysql一般你有什么调优的经验

在 MySQL 中进行性能调优的经验涉及多个方面,从数据库设计到查询优化,再到服务器配置等。以下是一些常见的 MySQL 调优技巧:

1. 数据库设计

  • 规范化:确保数据库表结构设计良好,避免数据冗余。
  • 反规范化:在某些读多写少的场景下,适度的反规范化可以减少复杂查询,提高性能。
  • 适当的字段类型:选择合适的数据类型,尽量使用定长类型,例如使用 INT 而不是 VARCHAR 存储数字。

2. 索引优化

  • 创建合适的索引:为频繁查询的字段创建索引,特别是主键、外键和需要排序或分组的字段。
  • 覆盖索引:通过索引覆盖查询来减少数据读取,例如 SELECT id, name FROM users WHERE id = ?,如果有 idname 的联合索引,就可以直接从索引中获取数据而不需要读取表。
  • 避免冗余索引:删除重复或不必要的索引,减少索引维护开销。
  • 复合索引:为多列创建复合索引,可以有效加速涉及多列的查询。

3. 查询优化

  • EXPLAIN 分析查询:使用 EXPLAIN 关键字来分析查询执行计划,找出性能瓶颈。
  • 避免全表扫描:确保查询条件使用了索引,避免全表扫描。
  • 适当使用 JOIN 和子查询:优化 JOIN 和子查询的使用,避免复杂的嵌套查询。
  • 分页优化:对于大数据量分页查询,避免使用 OFFSET,可以使用延迟关联或子查询来优化。

4. 缓存和临时表

  • 查询缓存:MySQL 支持查询缓存,但在高并发环境下可能效果不佳,可以使用应用层缓存,如 Redis。
  • 临时表:在复杂查询中,适当使用临时表可以分解查询,提高性能。

5. 配置优化

  • InnoDB 引擎配置
    • innodb_buffer_pool_size:设置为物理内存的 70%-80%,用于缓存数据和索引。
    • innodb_log_file_size:适当调整日志文件大小,提高写入性能。
    • innodb_flush_log_at_trx_commit:根据需求调整为 0、1 或 2,以平衡数据安全和性能。
  • 查询缓存配置:在 MySQL 8.0 中已被废弃,建议使用应用层缓存解决方案。
  • 连接数配置:调整 max_connectionsthread_cache_size,根据并发需求设置合适的值。

6. 硬件和系统优化

  • 磁盘 I/O 优化:使用 SSD 替代 HDD,提高读写性能。
  • 内存优化:增加服务器内存,确保数据库有足够的缓存空间。
  • CPU 优化:使用多核 CPU,确保 MySQL 可以充分利用多核性能。

❤️❤️❤️小郑是普通学生水平,如有纰漏,欢迎各位大佬评论批评指正!😄😄😄

💘💘💘如果觉得这篇文对你有帮助的话,也请给个点赞、收藏下吧,非常感谢!👍 👍 👍