解决办法
windows
此方法适用于,表数据量过大,查询sql语句写的没毛病,添加了索引并且查询时索引未失效的情况
找到配置文件my.ini
,找到配置参数innodb_buffer_pool_size
,将该值调大,格式例如:128M,1G等,修改完后重启mysql服务即可,linux、macos同理
说说我的情况,修改一个统计报表的时候,发现查询sql很慢,得好几秒,这哪能忍,直接explain大法,发现是连接其中一个表的时候直接扫的全表(大概4万条数据,关系是一对多),检查连接字段,发现该字段未加索引,于是加上了索引,继续查询,但查询速度还是很慢,这时候我有些纳闷了,才四万来条数据,走了索引和不走索引怎么都这么慢,于是开始百度搜mysql优化,大部分都是sql语句未命中索引和添加索引这些办法,但我已经知道目前的问题和sql语句和索引没多大关系了,于是继续往下翻,找到一个说是先都单表查询出来,然后再在程序里面聚合数据,这个方案我也想到过,但sql实在是太长了,实现起来比较麻烦,就暂未考虑该方案,于是接着找,上面提到单表查询,我试着单独查询那张四万条数据的表,发现很慢,于是开始百度mysql单表优化,找到一篇说是数据量过大时,更改innodb_buffer_pool_size
大小可以提高查询速度,于是我找到并修改了该配置,重启了mysql后查询速度确实变快了,0.2秒左右,这个结果已经挺令我满意了,至于为啥没有优化到毫秒,主要是因为奇葩需求,需要用到union all,总共要联合6个结果集,所以才会需要0.2秒
问题解决了后,我就想知道innodb_buffer_pool_size
是个什么玩意,于是百度,找到一篇挺不错的,链接如下
https://www.cnblogs.com/innocenter/p/14948857.html
详细解释可以看看这篇博客,里面提到了一个点,innodb_buffer_pool_size
默认是128M,而我当时打开配置文件的时候,这里显示的是8M,=_=,那张数据量大的表是四万来条数据,大小大概占了40M左右,而这里当时只有8M,怪不得查询的时候这么慢,哎,本地电脑的mysql是入职前上一任老哥安装的,也不知道他是怎么安装的有些问题,还是他把配置给改了,折磨了我半天