一、背景
系统上线之后,随着数据量越来越大,数据库压力也增大,故须对系统的数据表进行分表处理。
二、需求
1、 meituansdk_meituan_settlement表,根据orderId最后一位进行分表,由原来的1张分成10张表;
2、进行旧表的数据迁移
三、测试验证
1、数据表分表验证:
根据orderId最后一位进行分表,分成10张表,验证是否正常分成 meituansdk_meituan_settlement
-000、meituansdk_meituan_settlement_001到meituansdk_meituan_settlement_009,共10张表
2、验证旧数据迁移是否正常、验证新数据分表是否正常:
-- 以 meituansdk_meituan_settlement_000分表为例
SELECT
t1.orderId,t1.`status`,t1.foodAmount,t1.settleAmount,t1.pushTime,COUNT(orderId)
FROM
`meituansdk_meituan_settlement` AS t1
GROUP BY RIGHT(orderId,1)
-- 根据主表的orderid最后一位进行分组,10个组√,尾号0的82条
SELECT
t1.orderId,t1.`status`,t1.foodAmount,t1.settleAmount,t1.pushTime,COUNT(orderId)
FROM
`meituansdk_meituan_settlement_000` AS t1
-- WHERE RIGHT(orderId,1) = 0
-- 注释查询条件和不注释查询条件,是不是数量相等,即查询000表是不是都是以0结尾,√共84条数据
SELECT DISTINCT
t1.orderId,t1.`status`,t1.foodAmount,t1.settleAmount,t1.pushTime
FROM
`meituansdk_meituan_settlement` AS t1,
meituansdk_meituan_settlement_000 AS t2
WHERE
t1.orderId = t2.orderId
-- 查询两表之间orderid相同的记录,去重82条,000表有84条数据,说明有2条数据是新插入的
SELECT
t1.orderId,t1.`status`,t1.foodAmount,t1.settleAmount,t1.pushTime
FROM
`meituansdk_meituan_settlement_000` AS t1
WHERE t1.orderId not IN(SELECT orderId from meituansdk_meituan_settlement WHERE RIGHT(orderId,1)=0)
-- 验证000表是不是相对于总表尾数0差异的数据是2条√刚好是2条
-- 上述方法,可以验证其余的9个表
-- 以上SQL只能10个表一个一个进行验证,而且只核对了表结构和数据的数量,没有对每个值进行验证,后续优化
3、业务测试验证:
针对业务插入数据,不会再更新meituansdk_meituan_settlement表,只会根据orderId最后一位插入到对应的分表
网友评论