公众号merlinsea
慢查询日志
背景
在线上的环境中,sql语句的执行时间是无法直接通过终端窗口查看的,终端查看sql执行时间也不符合合理的规范流程, 那么此时就需要开启mysql的慢查询日志。开启了慢查询日志以后,mysql会将那些查询结果很慢的sql语句记录到慢查询日志中。那么一条sql的执行时间多久才被认为是慢呢?
开启慢查询日志的方法:
注意:以下的1-5步的方式开启慢查询日志是【临时的】,一旦mysql服务重启,那么就又会恢复到关闭慢查询日志的状态。核心是重启mysql服务的时候,会读取配置文件,配置文件是关闭慢查询日志的,那么重启的时候就会关闭慢查询日志。
1、查看慢查询日志是否开启
show variables like 'slow%';
2、开启慢查询日志
set global slow_qurey_log = 'on';
3、修改日志存放位置【也可以不修改,那么就是默认位置】
set global slow_query_log_file = '路径';
4、查看慢查询时间阈值
show variables like '%long%';
5、修改慢查询的时间阈值【默认单位是秒】
set long_query_time=0.4;
开启慢查询日志永久生效的方法
修改配置文件 vi /etc/my.cnf [mysqld] slow_query_log = 1 long_query_time = 0.1 slow_query_log_file =/usr/local/mysql/mysql_slow.log 最后必须重启mysql服务才能生效!
深度分页问题
1、深度分页问题介绍
后端开发中为了防⽌⼀次性加载太多数据导致内存、磁盘IO都开销过⼤,经常需要分页展示,这个时候就需要⽤到MySQL的LIMIT关键字。在查询过程中limit m,n表示从第m条数据之后取,取n条数据返回,这种情况下如果m过大,那么要先遍历前m条记录以后才能取到后n条记录返回,这个先遍历的过程就是深度分页问题。
2、深度分页的sql语句
select * from user where age>10 order by age desc limit 8000000,1000;
3、性能慢的原因分析:
1、通过where条件检索数据的时候是否用到了索引
2、buffer中的数据量过大,导致limit m,n的时候需要先遍历了大量的m条记录以后才能取出后面n条记录。
4、优化思路:
1、通过主键自增索引减少放入buffer内存中的数据量 select * from user where id>7999999 and age>10 order by age desc limit 10000;
2、Elastic Search搜索引擎优化(倒排索引)
关于leetcode算法训练营:
加我微信号私聊参加训练营~
本人用c++刷了800道左右的算法,java语言刷了600道左右的算法题,并对这些题做了详细的个人总结。本科期间系统学习了数据结构与算法课程,同时考研过程中写完了率辉主编的《2020年数据结构高分笔记》和《数据结构1000题》,看完的视频包括《mooc浙大数据结构国家精品课程》和《王道考研408数据结构课程》,《王道2019年算法题讲解视频》,最终以初试专业第三名进入了北理工软件工程专业。熟悉并掌握常见的数据结构,比如链表、数组、树、图、队列、堆栈等等,精通数据结构教材中的所有算法,比如常见的遍历算法、动态规划,递归,回溯,剪枝,并查集,最短路径,拓扑排序等等,所以快加入训练营吧,我们一起进步
奔跑的小梁,公众号:梁霖编程工具库算法训练营,快来参加