提到优化,先要肯定出现的问题,是存储引擎选择问题,仍是sql语句使用问题(如:索引)亦或者是单一存储服务器对于千万级别的数据力不从心。
解决方法:
一、根据不一样业务选用不一样存储引擎,虽然通常状况下都优先选择InnoDB。mysql
mysql两种存储引擎的区别:sql
MyISAM Innodb 缓存
事物支持 : 不支持 支持 服务器
锁的粒度: table Row 优化
存储容量: 没有上限 64TB spa
哈希索引 : 不支持 支持 .net
全文索引: 支持 不支持 日志
外键: 不支持 支持 blog
二、分析sql语句的影响结果集。查慢查询日志,定位慢查询的sql语句,查看是否有锁定的sql操做。
三、分库,分表,分区(慎用分区,每每OLTP操做不适用分区,分区反倒会拖慢原有查询)
四、利用缓存或NoSql代替现有一些热点查询操做,减轻Mysql压力。
分库:
能够基于业务逻辑拆分,不一样业务分布在不一样服务器中,减小单一服务器压力
分表:
垂直分表和水平分表两种方式
垂直分表:将表中的一些频繁更新和非频繁更新的字段分开存放
水平分表,三种分表方式:
均等分表,哈希方式分表,优势是负载平均分布,缺点是当容量持续增长时扩荣不方便,须要从新分表,主键就很很差处理。
递增分表,好比每一千万数据开一个新表,优势是自适应强,缺点是数据负载不均衡,须要代码层额外处理。
索引
时间分表,根据不一样的建立时间分表,适用于OLAP应用。
参照 http://my.oschina.net/ifeixiang/blog/339581