争对mysql数据表的优化网上给的方案也是多种多样,下面这些是我自己在网上看到的一些优化方案,在此整理一下:
对于数据量比较多的问题结合优化成本给出的优化顺序可以分为以下几步:
1、优化你的sql和索引,比如优化你的sql语句的写法,不要把sql语句写的太复杂,使用“临时表”暂存中间结果等; 2、加缓存,比如使用memcached,redis等; 3、如果以上都做了后,还是慢,可以考虑做主从复制或主主复制,读写分离,可以在应用层做,效率高,也可以用三方工具, 第三方工具这里推荐使用360的atlas,至于其他的个人觉得效率并不是很高,或者有的也没人维护; 4、以上三种如果都做了还是很慢的话,我觉得还是不要想着去做切分,mysql自带分区表,先试试这个,对你的应用是透明的,无需更改代码,但是sql语句是需要针对分区表做优化的,sql条件中要带上分区条件的列,从而使查询定位到少量的分区上,否则就会扫描全部分区,另外分区表还可能带来一些其他问题,具体可以自己去了解一下; 5、如果以上都做了,那就先做垂直拆分,其实就是根据你模块的耦合度,将一个大的系统分为多个小的系统,也就是分布式系统; 6、争对以上的优化如果觉得满足不了,需要做进一步优化的话这时可以考虑水平切分,针对数据量大的表,这一步最麻烦,最能考验技术水平,要选择一个合理的sharding key,为了有好的查询效率,表结构也要改动,做一定的冗余,应用也要改,sql中尽量带shardi