一、背景
系統上線之後,隨着數據量越來越大,數據庫壓力也增大,故須對系統的數據表進行分表處理。
二、需求
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最後一位插入到對應的分表