mysql 单表优化求方案

背景

  • 数据量:数据量大约3000w+ ,数据大小10g,索引30g,如下图。

  • 需求:需要比较多的group by 操作和全量数据操作。

  • 问题:各种group by 特别慢。

已尝试方案:

  • 1:尝试放es,但操作非常不方便。

  • 2:数据表分表,成本比较大,从时间和业务角度都没有比较好的分表方案。

  • 3:读写分离,分离之后效果提升不大。

  • 4:在尝试postgresql,但需要业务较大的变动,暂未试试。

求存储或者优化方案,最好是存储在mysql上优化,其他存储介质也可以。

clipboard.png

阅读 4.5k
6 个回答

大表优化无非就建索引、数据水平切分、竖直切分,该用的你都测了,没见你把表结构和索引截出来也不好说,索引不要建太多。
建议是从业务层面上去优化,看是否需要分页,即使是全量数据操作,用预统计是否合适,是否需要冗余字段来让group by更充分利用索引。

group by 优化方案
Loose Index Scan和Tight Index Scan 。中文叫做松散索引扫描和紧凑索引扫描
具体可以参考官方文档
http://dev.mysql.com/doc/refm...

新手上路,请多包涵

sphinx 试试?

postgresql对多表关联和count支持速度怎样?
测试的mysql多表关联,慢!索引优化确实很关键;
还有就是多表关联后的视图,排序、count分页等速度更加难以想象。
这里想回问下你们怎么解决多表关联、视图、分页的问题,看样索引是真没少建啊。

该用的你都测试了,全量数据操作我也没想出来什么好的办法了。
对于group by操作,如果是固定的sql(业务需要),

1)可以考虑用存储过程将常用sql的结果定时生成新表的数据。
2)将常用的sql字段分拆,再优化
  1. 我们有系统也有一张数据量比较大的表。仅仅是一张表做分库分表成本很大,所以我们按时间进行了分区表。(每一个月的数据分一个区)。表数据如下image.png。分区表信息image.png
  2. 建立时间索引,sql语句一定要走分区表,查询的时候尽量分时间分页image.png
  3. sql尽量简单化,这个sql应该还能优化,如果有大神,不要吝啬自己的意见,请对我这个菜鸟指指点点。(手动滑稽)
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题