线上慢sql优化经历

226 阅读1分钟

通过阿里云数据库管理界面可以看到慢sql语句

image.png

就拿第一条来说

SELECT id, use_line, country, continent FROM dcp_ip_message WHERE ip = ?

生产环境dcp_ip_message表中数据大概是3000w,排查及优化思路如下:

  • 首先查看索引,使用了ip作为唯一索引,ip,use_line做联合索引

优化思路:首先查询条件作为唯一索引没有问题,这里要保证ip的唯一性,然后查询的字段中只有ip和user_line做联合索引,所以在查country,continent的字段时,会产生回表操作,回表导致数据的查询时间增加

  • 然后从业务上优化,业务中会把查询出的数据写入到本地内存中(Map),这样导致数据量过大时内存溢出或者使得服务器响应时间慢

优化思路:引入redis中间件缓存和guava本地内存优化数据缓存操作

  • 最后优化表的数据量

优化思路:历史数据备份,新数据存入dcp_ip_message表,这样查询时读取的数据量小很多