之前面试也好,工作也好,常常提到sql优化,理论知道一大堆,什么加索引了,读写分离了,分库分表了,但是实践的机会总是很少,最近,接触到一些mysql大表查询慢的优化,感觉也没有那么神秘,下面就介绍一下我的场景。
场景一:
我们有一张日志表,主要用来记录各种重要接口的日志,便于生产出现问题定位解决,但是这张表数据忒别大,所有每次出现问题,要查这张表的时候都特别慢,后来运维老师在常用字段上增加了索引,快多了,3-4s就可以查到数据,以前的几分钟,我估计一下数据量可能好几千万,因为后来我们运维老师只保留了1年的数据,有一天系统监控到系统好多接口非常慢,都得7-8s返回数据,这是相当严重得问题,我看了监控日志发现,全部都是因为日志表insert引起得,一查数据3000w,哇塞,一年好大得数据量啊,怪不得慢,数据量大了不仅会影响select速度,也会影响insert速度,其实几千w得数据,如果增加一些索引,查询还是可以得,但是insert会越来越慢,为了不影响元旦开门红,直接把原表bak,重新建了一个日志表;
场景二:
有一次我们需要同步我们得数据给集团,一共设计3张大表,我就叫它A,B,C把,A表差不多有300w数据,B表1000w,我只需要一年得数据,那就是A表100w,B表300w,最后关联查询出来去C表查询,我是10000条查一下,处理一次,循环10000次查C表,增加索引后其实还挺快了,因为是推送数据得场景,10000条数据差不多1分钟全部处理完成,一个月30w数据1.5h处理完成
后来我经过总结,1000w以内得数据索引基本上都可以解决慢sql得问题,至于多表联合查询时可能也导致慢sql,即使表不是很大,后面我们慢慢更新
以上就是我得一些学习心得,有什么说得不对得地方,欢迎大家指教!