MySQL处理大量数据的一些方法

一、复刻一张表的数据到另一张表(结构相同)

从当前表查询所有数据到快照表(注:快照表只比当前表多一个快照时间字段CKTIME)。由于使用框架查询出来之后再插入到快照表会牺牲掉很大性能,所以直接采用sql脚本的方式将数据迁移到快快照表。
SQL如下:

INSERT INTO t_test_snapshot (
	AID,CKTIME,MGID,...,ENABLE,REMARK 
) 
SELECT
	AID,'2021-03-29 10:52:16',MGID,...,ENABLE,REMARK 
FROM	t_test
WHERE	MGID = 1 

二、常用的解决方案

1、读写分离

读写分离,将数据库的读写操作分开,比如让性能比较好的服务器去做写操作,性能一般的服务器做读操作。写入或更新操作频繁可以借助MQ,进行顺序写入或更新。

2、分库分表

分库分表是最常规有效的一种大数据解决方案。垂直拆分表,例如将表的大文本字段分离出来,成为独立的新表。水平拆分表,可以按时间,根据实际情况一个月或季度创建一个表,另外还可以按类型拆分。单表拆分数据应控制在1000万以内。分库分表后要注意对SQL语句的支持,稍不小心,可能就会造成业务数据混乱等问题。

3、数据缓存

使用缓存技术降低对数据库直接访问的压力,比如使用Redis内存数据库存储热点数据,全量缓存内存占用太大,所以要识别出热点数据进行缓存,比用用户信息表,可以考虑缓存一段时间内的活跃用户。但是使用服务缓存也有缺点,最常见的问题就是“击穿”,假如缓存都失效了,这时候并发请求都去访问MySQL,此时可能造成服务器挂掉,这个时候为了避免这种情况,一般都是使用互斥量来解决这种问题。

4、SQL语句优化

尽量避免联表查询,避免递归等消耗性能的语句。表设计优化,例如单表字段不宜过多,时间类型使用TIMESTAMP,字段尽量避免NULL等。索引优化,合理创建索引,索引不是越多越好,也不是所有的字段都适合建立索引。

5、多节点负载均衡

条件允许可以考虑多节点负载均衡,或者使用分布式数据库TiDB、SequoiaDB。

你可能感兴趣的:(MySQL数据库,mysql)