💝💝💝欢迎来到我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。
非常期待和您一起在这个小小的网络世界里共同探索、学习和成长。💝💝💝 ✨✨ 欢迎订阅本专栏 ✨✨
前言
小郑最近在准备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 = ?
,如果有id
和name
的联合索引,就可以直接从索引中获取数据而不需要读取表。 - 避免冗余索引:删除重复或不必要的索引,减少索引维护开销。
- 复合索引:为多列创建复合索引,可以有效加速涉及多列的查询。
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_connections
和thread_cache_size
,根据并发需求设置合适的值。
6. 硬件和系统优化
- 磁盘 I/O 优化:使用 SSD 替代 HDD,提高读写性能。
- 内存优化:增加服务器内存,确保数据库有足够的缓存空间。
- CPU 优化:使用多核 CPU,确保 MySQL 可以充分利用多核性能。
❤️❤️❤️小郑是普通学生水平,如有纰漏,欢迎各位大佬评论批评指正!😄😄😄
💘💘💘如果觉得这篇文对你有帮助的话,也请给个点赞、收藏下吧,非常感谢!👍 👍 👍