美文网首页
MySQL分表测试初体验

MySQL分表测试初体验

作者: 静静地就好 | 来源:发表于2021-06-28 22:08 被阅读0次

    一、背景

        系统上线之后,随着数据量越来越大,数据库压力也增大,故须对系统的数据表进行分表处理。

    二、需求

    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最后一位插入到对应的分表

    相关文章

      网友评论

          本文标题:MySQL分表测试初体验

          本文链接:https://www.haomeiwen.com/subject/fgycultx.html