MySQL翻(fan)倍生成大(da)量壓測鋪(pu)底數據
最近(jin)新項目版(ban)本比較(jiao)趕,需要完(wan)成(cheng)mysql數據(ju)(ju)庫(ku)總多張表的(de)百萬級數據(ju)(ju)鋪底工作,又不想寫代碼來完(wan)成(cheng)這件事情(qing),就想偷個懶簡(jian)單(dan)一(yi)點,于是(shi)就想到(dao)了(le)使用mysql數據(ju)(ju)庫(ku)自(zi)帶(dai)的(de)insert和select來完(wan)成(cheng)取基礎(chu)數據(ju)(ju)和完(wan)成(cheng)插入,然后為了(le)避免出現數據(ju)(ju)重復(fu)導致辨別度不高的(de)問題,我(wo)通過mysql自(zi)帶(dai)的(de)字符(fu)拼(pin)接函數CONCAT(愛死這些字符(fu)處理函數了(le)),又發現ID不是(shi)自(zi)增的(de),這個也比較(jiao)坑,我(wo)又想到(dao)了(le)UUID來避免出現重復(fu)ID。
我們知(zhi)道一個(ge)(ge)(ge)故事(shi)就是大臣和皇(huang)上(shang)下棋(qi)要賞(shang)賜,說第(di)一個(ge)(ge)(ge)棋(qi)格子放1個(ge)(ge)(ge)米粒,第(di)二個(ge)(ge)(ge)放2個(ge)(ge)(ge),第(di)三個(ge)(ge)(ge)再翻(fan)(fan)倍(bei),最終皇(huang)上(shang)也(ye)無法滿足(zu)這(zhe)個(ge)(ge)(ge)大臣的賞(shang)賜。我們這(zhe)里其實也(ye)是用到了這(zhe)個(ge)(ge)(ge)原理,我們通過翻(fan)(fan)倍(bei)表中的數(shu)據(ju)來輕松實現百萬、千萬數(shu)據(ju)的生成(cheng),我們先寫一個(ge)(ge)(ge)從本(ben)表中篩選數(shu)據(ju)并插入的sql(如下),然后根據(ju)自(zi)己的需要多次執行來翻(fan)(fan)倍(bei)生成(cheng)數(shu)據(ju)
好了,上sql:
INSERT INTO TMD_SEND_LOG //插(cha)入表
SELECT
REPLACE(UUID(),'-','') ID , //生成(cheng)UUID并把'-'字符去掉
CONCAT(BOX,'1'), //將(jiang)原(yuan)數據拼接字(zi)符來避(bi)免(mian)辨識度(du)不高,這個多次執(zhi)行可(ke)以隨意修改
OPERATION_USER,
CREATE_DATE,
UPDATE_DATE
FROM TMD_SEND_LOG //數據來源表(biao),在這里是本表(biao)
WHERE OPERATION_USER = '888123'
LIMIT 100000 //通過LIMIT來限制插入(ru)數量,防止數據插入(ru)太多,可以控(kong)制最終表數據總量
SELECT
ID AS "id",
BOX_CODE AS "boxCode",
SITE AS "site",
FUNCTIONS AS "functions",
SEND_WCS_STATUS AS "sendWcsStatus",
SEND_NUM AS "sendNum",
OPERATION_USER AS "operationUser",
CREATE_DATE AS "createDate",
UPDATE_DATE AS "updateDate"
FROM
LDCS_UNLOAD_SEND_WCS_LOG