对于大表(千万级)

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

给你一囗甜甜゛ 提交于 2020-04-14 01:10:13
【今日推荐】:为什么一到面试就懵逼!>>> 提到优化,先要确定出现的问题,是存储引擎选择问题,还是sql语句使用问题(如:索引)亦或者是单一存储服务器对于千万级别的数据力不从心。 解决方法: 1、根据不同业务选用不同存储引擎,虽然一般情况下都优先选择InnoDB。 mysql两种存储引擎的区别: MyISAM Innodb 事物支持 : 不支持 支持 锁的粒度: table Row 存储容量: 没有上限 64TB 哈希索引 : 不支持 支持 全文索引: 支持 不支持 外键: 不支持 支持 2、分析sql语句的影响结果集。查慢查询日志,定位慢查询的sql语句,查看是否有锁定的sql操作。 3、分库,分表,分区(慎用分区,往往OLTP操作不适用分区,分区反倒会拖慢原有查询) 4、 利用缓存或NoSql代替现有一些热点查询操作,减轻Mysql压力 。 分库: 可以基于业务逻辑拆分,不同业务分布在不同服务器中,减少单一服务器压力 分表: 垂直分表和水平分表两种方式 垂直分表:将表中的一些频繁更新和非频繁更新的字段分开存放 水平分表,三种分表方式: 均等分表,哈希方式分表,优点是负载平均分布,缺点是当容量持续增加时扩荣不方便,需要重新分表,主键就很不好处理。 递增分表,比如每一千万数据开一个新表,优点是自适应强,缺点是数据负载不均衡,需要代码层额外处理。 时间分表, 根据不同的创建时间分表