当前位置: 首页 > news >正文

java面试题-谈谈sql优化-mysql

远离八股文,面试大白话,通俗且易懂

看完后试着用自己的话复述出来。有问题请指出,有需要帮助理解的或者遇到的真实面试题不知道怎么总结的也请评论中写出来,大家一起解决。

这是面试总结出来的几点,每次问道都是这么回答,分层分点。

首先搞懂sql优化的目的是什么,然后针对每个目的具体做什么操作。

目的一:减少磁盘IO次数

在数据库中主要是来自于像全表扫描这种扫描大量数据快的场景,然后就是日志以及数据块的写入所带来的压力

1.  可以通过加索引来避免全表扫描,但是索引根据实际情况添加,太多的时候就会影响新增修改等操作的性能-有得必有失(正常情况下一张表尽量6个以内差不多)

2.  select查询的时候不使用select * ,明确要查询的字段,非必须的字段会占用磁盘内存空间

3.  尽量避免使用子查询(子查询会建立临时表、撤销临时表消耗cpu和io资源,另外临时表肯定没有索引,一定情况下会影响效率)

目的二:减少网络宽带

第一是返回数据太多,数据传输消耗较多。第二是频繁新增更新建立链接

1.sql查询时使用limit减少返回的数据,有时候分大量数据多次查询比一次性大量数据效率要高,甚至可以使用多线程更快。

2.新增、修改等等操作尽量避免多次循环操作,要使用values(),一次性操作,而不是一条一条的去操作。

目的三:降低CPU的消耗

1.join多表联查要尽量优化,有时候冗余字段占不了多少空间,但是如果没有冗余字段就得连表查询,这样就会增加sql复杂度。

2.order by 、group by等操作尽量作用在索引上

3.聚合函数(max、count、sum等),如果数据量比较大,会非常占用时间,mysql引擎原理是把数据一条一条取出来然后进行聚合计算。所以数据量大的时候,聚合函数就非常耗时。

tips:经典例题就是mybatis分页查询的时候,有时候sql直接执行很快,但是通过mybatis分页查询就慢,原因就是分页查询里面会进行count查询总数

针对聚合函数慢的解决方法可以使用统计表,每天将数据统计好存入统计表中,也就是统计表中每天就只有一条数据或者纬度细一点多条数据。这样后面统计直接查询统计表即可、

这是大概的总结 ,我每次遇到这样的问题都是固定模式:

面试官:你对于sql优化有没有经验?

我:之前在工作中遇到过也做过总结,就是看我们的需求是什么,进而对应的做出优化方案。我总结了大概有三点,第一点就是减少磁盘io次数,对于这个可以做的是通过加索引....第二点是...第三点是 .....

http://www.lryc.cn/news/253466.html

相关文章:

  • 【Linux服务器Java环境搭建】07 在linux中安装MySql,以及对MySQL的配置与远程连接
  • 用 LangChain 搭建基于 Notion 文档的 RAG 应用
  • QT中如何使用自定义控件
  • xcode ——Instrumets(网络连接调试)使用
  • Ps:文字操作常用快捷键
  • SpringSecurity的默认登录页的使用
  • 【Rust日报】2023-12-04 slint 成功案例
  • 嵌入式硬件和软件哪个好?
  • MySQL 8.x 自签证书通过keytool和openssl转成JKS文件
  • MybatisPlus概述
  • C++之枚举与宏定义
  • DAPP开发【09】NFT交易市场开发(hardhat测试)
  • 【Spring Boot】如何通过RestTemplate获取另一个服务的接口返回信息
  • 文字识别(OCR)专题——基于NCNN轻量级PaddleOCRv4模型C++推理
  • ❀My学习Linux命令小记录(14)❀
  • SqlServer存储过程中使用in
  • Selenium+Unittest+HTMLTestRunner框架更改为Selenium+Pytest+Allure(二)
  • Kotlin Lambda使用
  • 华容道问题求解第一部分_思路即方案设计
  • 测试---UI自动化测试介绍
  • DHCP Host Name
  • uniapp到底用什么ui框架最合适-关于uni-app的ui库、ui框架、ui组件
  • Flask 最佳实践(二)
  • 【MATLAB源码-第93期】基于matlab的白鲸优化算法(BWO)和鲸鱼优化算法(WOA)机器人栅格路径规划对比。
  • nodejs微信小程序+python+PHP在线购票系统的设计与实现-计算机毕业设计推荐
  • 卷积神经网络训练情感分析
  • github新建项目
  • CRC(循环冗余校验)直接计算和查表法
  • 【算法思考记录】力扣2952. 需要添加的硬币的最小数量【C++,思路挖掘,贪心与证明】
  • 用友NC JiuQiClientReqDispatch反序列化RCE漏洞复现