Mysql对于大表的优化有很多方法和方案,所以要清楚的知道目前Mysql的版本、性能、问题与瓶颈。再认真分析目前的问题或未来可能遇到的问题,制定优化的目标,确定优化方法与方案。根据大牛的经验,进行了简单的总结,如下:
第一优化你的sql和索引
这一步优化可解燃眉之急,高效、成本低、回报高,特别是对查询业务。需要精通SQL与索引的相关知识。
第二加缓存,memcached,redis
这一步需要稍微改变程序架构,需要部署缓存服务,但是成本低、回报快。
第三主从复制或主主复制,读写分离,可以在应用层做,效率高。
这一步需要稍微改变程序架构,同时需要部署多个Mysql服务,成本有所提升、到这一步基本可以解决大部分非高并发非超大数据项目。
第四mysql自带分区表。
分区表对你的应用是透明的,无需更改代码,但是sql语句是需要针对分区表做优化的,sql条件中要带上分区条件的列,从而使查询定位到少量的分区上,否则就会扫描全部分区,另外分区表还有一些坑,在这里就不多说了;
第五垂直拆分
其实就是根据你模块的耦合度,将一个大的系统分为多个小的系统,也就是分布式系统;
第六水平切分
针对数据量大的表,这一步最麻烦,最能考验技术水平,要选择一个合理的sharding key,为了有好的查询效率,表结构也要改动,做一定的冗余,应用也要改,sql中尽量带sharding key,将数据定位到限定的表上去查,而不是扫描全部的表。
以上步骤,是一个递进的关系,在mysql优化过程中,作为程序员或DBA,若是架构改动成本太高或是时间不允许的情况下,那就优化 SQL和索引吧,毕竟这一步是最容易做的,当然对于大型项目来说,优化SQL和索引并非易事。咬咬牙,收获会很多!