MySQL性能优化

小蚂蚁学习mysql性能优化(4)--SQL以及索引优化--具体一些优化方法

爷,独闯天下 提交于 2019-12-23 22:47:11
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> max()的优化 例如:explain select max(`payment_date`) from payment; 可以查看到row的行数非常的多,也就是说扫描了整张表。 为payment_date加上一个索引。 create index idx_payment on payment (`payment_date`); 执行sql语句 explain select max(`payment_date`) from payment order by payment_date; 可以看到rows为null。 extra: select tables optinized away; 并没有扫描整个表,只是通过索引拿出。 索引是通过顺序排列的,所以,通过索引的统计信息就非常清楚的知道,最后一个payment_date的数值是什么样子的。因此并不需要对表的操作,这样就大大的增加了这条sql的执行效率,同时尽可能大的减少了IO操作,这样的话,不管数据量有多大,执行效率基本上是恒定的。 思路:对于max()的查询,可以通过索引的方式来优化它。 count(*)和count(num)的区别 如果num某行为null,count(num)是不包含在内的。而count(*)则是会包含在内的。这就是为什么有时会出现差异的原因。

mysql--------大数据量分页sql语句优化

岁酱吖の 提交于 2019-12-01 19:28:50
分页程序原理很简单,这里就不多说了,本篇文章主要说的是在数据表记录量比较大的情况下,如何将分页SQL做到更优化,让MySQL执行的更快的方法。 一般的情况下,我们的分页SQL语句是这样的: SELECT * FROM table ORDER BY id LIMIT 1000,10; 以上SQL语句在原理上和在实际操作中是不会存在什么问题,但是当table表的数据量达到几十万以上的时候,上面的语句执行一遍,可能会要执行个十几秒的时间,并且当页数越靠后的话,执行的时间会越长,这个时候我们就需要找到一种更快的查询办法来替代这种操作了。 网上已经有很多优化的方法,基本都是这样的: SELECT * FROM table WHERE id >= (SELECT id FROM table LIMIT 1000000, 1) LIMIT 10; 以上SQL语句是一个不错的解决方法,分页查询的速度基本会保持在1秒之内,但据经验总结得出还有一种更好的办法,如下: SELECT * FROM table WHERE id BETWEEN 1000000 AND 1000010; 相比以上的解决办法,在速度上还会快了不少。 另外分享两个关于查询的技巧: (1)如果需要查询 id 不是连续的一段,最佳的做法就是先找出 id ,然后用 in 查询: SELECT * FROM table WHERE id

小蚂蚁学习mysql性能优化(3)--SQL以及索引优化--慢查日志分析工具和explain说明

眉间皱痕 提交于 2019-11-26 23:21:52
昨天在测试操作数据库的时候碰到两个问题忘了记录下来,今天补充上去, 接上篇 1. 安装测试数据库sakila时报错。Mysql server has gone away的问题。解决方法: 查看 show global variables like 'max_allowed_packet'; 一般来说会显示 max_allowed_packet 1048576 修改为 set global max_allowed_packet=1024*1024*16; 发生这种情况的原因,可能是发送的sql语句太长,以至于超过了max_allowed_packet的大小,如果确认是这种原因,只要修改my.cnf,加大max_allowed_packet的值即可。 2. 我用 mysql 版本 5.6.* 在设置long_query_time的时候,一直修改不了,不生效。在网上查询了一下解释,经过自己测试,这估计是个bug吧,其实已经修改成功了。可以另外打开一个mysql控制台,再查看,就会显示正确。 这是昨天碰到的两个问题,在这里补充一下。 慢查日志的分析工具 mysqldumpslow 安装mysql的时候系统自带。最常用,但是功能不是很完善。 例子:mysqldumpslow -t 3 慢查日志路径 | more 分析慢查日志最耗时的前三条。 pt_query_digest

十、MySQL的SQL优化之定位SQL的问题

点点圈 提交于 2019-11-26 23:18:39
找出SQL慢的原因 谈到MySQL不得不说的就是大家都会遇到的性能问题,今天就记录一下SQL优化相关的技巧。 检查MySQL状态 通过检查SQL语句的状态有助于MySQL的优化,首先介绍 show status命令 //检查当前会话的状态 SHOW SESSION STATUS; //检查全局状态 SHOW GLOBAL STATUS; 这个命令可以查看到MySQL中sql语句的执行状态,具体的如下: 参数 说明 Com_select SELECT查询次数 Com_insert INSERT操作次数 Com_update update更新次数 Com_delete delete操作次数 innodb_rows_read innodb_rows_inserted innodb_rows_updated innodb_rows_deleted select查询返回行数 update、insert、delete操作次数 Connections MySQL累计连接次数 Slow_queries 慢查询次数 Handler_read_key 索引查询数 Handler_read_rnd_next 读取下一行的次数 通过以上的数据,可以检查出MySQL连接数量,决定是否使用链接池,索引利用率。 根据读写状况,可以了解到选择什么样的存储引擎更加合适。 分析SQL的执行计划