MySQL 对于大表(千万级),要怎么优化

提到优化,先要肯定出现的问题,是存储引擎选择问题,仍是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

相关文章
相关标签/搜索