MySql常见性能查询、调优语句和慢sql
- MySql常见性能查询、调优语句
-- 查询慢查询次数 show status LIKE 'slow_queries'; -- 查看慢查询 show variables LIKE 'long_query_time'; -- --设置慢查询时间 setlong_query_time=1; -- 开启慢日志 set GLOBAL_slow_query_log=ON; -- 使用explain来分析sql语句实现优化 EXPLAIN 具体sql语句; -- 查看当前服务器配置的最大连接数 show variables LIKE 'max_connection'; -- 查看当前已使用最大连接数 show GLOBAL status like '%max_used_connections%' -- 设置最大连接数 set GLOBAL MAX_CONNECTIONS=10000;
-- 查询是否有锁
show OPEN TABLES where In_use > 0;
- 慢sql的原因
1、查询的表--没加索引
查询的条件字段没有索引,导致全表扫描。这种在数据量比较少时,如低于十万级不会觉得慢,但当表中数据量达到或超过十万级时,就会体现出来,查询时间特别慢
2、查询的索引,无效
查询条件没有索引字段。
查询条件使用or,选择式过滤条件,导致索引无效
查询条件使用Like,且从头部开始模糊匹配,致索引无效
查询条件不满足复合索引的最左匹配原则,致索引无效
查询条件,索引列使用了隐藏类型转换,致索引无效
查询条件,索引列使用了算术运算+、- 、...致索引无效
查询条件,索引列使用了逻辑运算(!=、<>、is null、is not null)致索引无效
3、查询使用了--临时表
临时表可能不用,但是回表查询(一次查询不满足 就把这些结果存在临时表,还需要利用查询结果再查一次)
4、join或子查询太多
有些场景复杂,关联的表越多,时间自然就越长;一般关联不建议超过3个,且数据量小的表放左边,大的放右边。
5、查询结果数据量太大
第1种你直查的表数据量太大,千万级。即使那了索引,索引文件也会很大,深度很深,查询就会慢。解决方法分表分区。
第2种联表笛卡尔积量太大。解决方法explain进行sql分析优化
6、锁竞争
现在Mysql的表一般都是InnoDB存储引擎,该引擎是行锁,每次锁定一行。若一个事务在操作一行数据,会锁定该行数据,其它事务直到前一个事务操作完成才能操作该行数据;若多个事务等待时,前一事务结束,等待的事务就会竞争抢锁,sql性能就会很慢了
7、limit分页--太深
查询需要偏移一定量数据时,一般会用Limit,偏移量大时sql执行会很慢。因为偏移量会分页读取到buffpool中,数据量大,占用的空间大,而这个空间大小是配置的,一般不会很大,所以,导致了慢sql
8、配置参数--不合理
数据库中有些非常重要的参数,例多很带有buff、cache、size、length、max、min、limit等字样的配置参数。都是直接关系数据库性能的。若都是默认值,硬件条件再好性能也发挥不了作用。
9、频繁刷脏页
脏页,是内存数据页和磁盘数据页不一致。一般发数据更新操作中。更新数据,要先把数据读取出来然后再内存中更新,最后生成日志文件,再放日志文件,实现表数据更新。若数据量大,buffpool写满或者后续生成的日志文件 写满,都会导致这个操作过程变慢。
解决方法:建议少批量修改,多次提交
10、系统资源--不够用
数据库是用来存储数据,频繁进行磁盘操作,所以要选择磁盘IO性能比较好的机器作为数据库服务。
数据库还要经常进行数据交换,所以要有足够的内存。
mysql安装在操作系统中,所以也受操作系统限制
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 在鹅厂做java开发是什么体验
· 百万级群聊的设计实践
· WPF到Web的无缝过渡:英雄联盟客户端的OpenSilver迁移实战
· 永远不要相信用户的输入:从 SQL 注入攻防看输入验证的重要性
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
2016-07-02 Python startswith()方法