Mysql sending data耗时过多

姚贤贤 2019-07-29 08:01:54
表使用的InnoDB,使用以下语句,数据有1400W,就统计个年龄段分别有多少人,索引age
select age,count(1) from user group by age

使用show profile查看,发现sending data这种了7秒的时间
InnoDB_buffer_pool_size = 10G

实在找不到优化了,难道已经到了mysql性能的瓶颈了?
...全文
864 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
小雨的小跟班 2021-01-30
  • 打赏
  • 举报
回复
定时更新下把
声心听聆 2019-10-25
  • 打赏
  • 举报
回复
mysql的my.ini 中的 innodb_buffer_pool_size=8M 这是mysql5.7默认的,改成512或1024,再重启即可. 会让普通查询快一点。
遇星 2019-07-30
  • 打赏
  • 举报
回复
引用 5 楼 姚贤贤 的回复:
[quote=引用 2 楼 受了伤风的星辰 的回复:] 这个主要是看执行计划有没有走age列上的索引,执行计划没问题,那么就是正常的。 sending data是指SQL查询开始从表上面读取数据,到发送结果集到客户端的整个过程,所以如果查询本身需要访问大量数据,就决定了查询时间很长,那么sending data就自然占据了很多时间; 所以你这个例子的sending data耗时过多,是因为SQL本身读取数据比较耗时;读取数据过多是因,sending data数值大是果。
那也就是说到瓶颈了[/quote] 如果已经用上了索引,那应该就是瓶颈了,这个应该是覆盖索引了,只扫一个int列的索引,buffer pool应该够用。看看是否能把这个表拆分一下,MySQL1000W数据量一般差不多就会查询变慢了,当然也看平均行数据的长度,要是每行就几个整型,1个E估计也不是问题; 可以尝试把跟sending data有关的一些内存配置加大一些,例如net_buffer; 机械盘换成SSD等;
姚贤贤 2019-07-30
  • 打赏
  • 举报
回复
你这个500W的说法有什么依据吗?
姚贤贤 2019-07-30
  • 打赏
  • 举报
回复
引用 2 楼 受了伤风的星辰 的回复:
这个主要是看执行计划有没有走age列上的索引,执行计划没问题,那么就是正常的。

sending data是指SQL查询开始从表上面读取数据,到发送结果集到客户端的整个过程,所以如果查询本身需要访问大量数据,就决定了查询时间很长,那么sending data就自然占据了很多时间;

所以你这个例子的sending data耗时过多,是因为SQL本身读取数据比较耗时;读取数据过多是因,sending data数值大是果。

那也就是说到瓶颈了
姚贤贤 2019-07-30
  • 打赏
  • 举报
回复
引用 1 楼 的回复:
我之前看到这篇文章,可能能帮到你https://blog.csdn.net/yunhua_lee/article/details/8573621

这一篇我也看过了,但和他情况不太一样,我这里使用了索引,而且也走了索引,age本身的长度就很小int4,没啥长度
心怀啊 2019-07-30
  • 打赏
  • 举报
回复
一张表的最大容量应该限制在五百万左右,太大了影响效率
遇星 2019-07-30
  • 打赏
  • 举报
回复
这个主要是看执行计划有没有走age列上的索引,执行计划没问题,那么就是正常的。 sending data是指SQL查询开始从表上面读取数据,到发送结果集到客户端的整个过程,所以如果查询本身需要访问大量数据,就决定了查询时间很长,那么sending data就自然占据了很多时间; 所以你这个例子的sending data耗时过多,是因为SQL本身读取数据比较耗时;读取数据过多是因,sending data数值大是果。
TamoR. 2019-07-30
  • 打赏
  • 举报
回复
我之前看到这篇文章,可能能帮到你https://blog.csdn.net/yunhua_lee/article/details/8573621

56,677

社区成员

发帖
与我相关
我的任务
社区描述
MySQL相关内容讨论专区
社区管理员
  • MySQL
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧