MySQL數(shù)據(jù)庫生產環(huán)境的維護工作總結的經驗
(一) DML語句書寫建議
(1). DML語句不允許出現(xiàn)@number方式替代字段名稱
不合理的寫法:
UPDATE table_name SET @1=NOW() WHERE @2=1;
正確的寫法:
UPDATE table_name SET column_name1=NOW() WHERE column_name2=1;
(2). UPDATE OR DELETE 禁用LIMIT子句
不合理的寫法:
UPDATE table_name SET column_name1=NOW() WHERE column_name2=1 LIMIT 1;
正確的寫法:
UPDATE table_name SET column_name1=NOW() WHERE column_name2=1;
(3). INSERT語句需要寫清楚值和字段對應關系
不合理的寫法:
INSERT INTO table_name VALUES(NOW(),DATE_ADD(NOW(),INTERVAL +1 DAY));
正確的寫法:
INSERT INTO table_name(gmt_create,gmt_modify) VALUES(NOW(),DATE_ADD(NOW(),INTERVAL +1 DAY));
(4). DML語句少用不確定性函數(shù)
常見被大家使用的不確定性函數(shù):UUID()、RAND()、SYSDATE()等函數(shù),若無特殊用處之外,請以確定性函數(shù)替代之。
推薦閱讀的技術文章:曾用于內部培訓的PPT內容:MySQL開發(fā)規(guī)范與實用技術交流
(二) 大數(shù)據(jù)量的DELETE OR UPDATE
可能出于某些原因和運營目的,需要對數(shù)據(jù)庫中的數(shù)據(jù)進行大量的清理或更改某字段的值,分別舉 二個示例:
① 網(wǎng)絡專項整治的時期,需要刪除大量含某些關鍵詞的內容;
、 給符合某一條件(例如:等級,在線時長)的游戲玩家,贈送100~1000不等數(shù)量的游戲幣;
給出的2個數(shù)據(jù)修改需求示例,若是直接根據(jù)相關要求去做,一個是需要用到模糊查詢,另一個數(shù)據(jù)更新條件也沒有合理索引可用,為此可能造成表對象表級鎖被長時間鎖住,而且阻塞其他更改類型數(shù)據(jù)操作服務,所以我們不得不采用更合理的辦法,建議如下步驟實施:
① 設計并創(chuàng)建一張表tmp_pk_data ,用于記錄將要被修改記錄的主鍵,及需要的相關信息;
、 優(yōu)先考慮在備庫上跑一條SQL命令或存儲過程的方式,把主鍵及相關數(shù)據(jù)寫到表tmp_pk_data中;
、 編寫一個存儲過程,使用游標循環(huán)控制獲得tmp_pd_data的信息,根據(jù)主鍵更新或刪除目標表的數(shù)據(jù),且建議此操作在備庫上完成(注釋:必須是雙主復制模式,才可在備庫上執(zhí)行);
(三) 定期規(guī)律性清理數(shù)據(jù)的DELETE
定期規(guī)律性數(shù)據(jù)的清理,優(yōu)先對目標表的數(shù)據(jù)操縱方式進行分類:
、 若是日志類型的數(shù)據(jù),則完全可以改為借助分區(qū)表的方式,比如按日期刪除數(shù)據(jù)的條件,則可以用日期作為數(shù)據(jù)分區(qū)條件,然后增刪分區(qū)的方式實現(xiàn)數(shù)據(jù)的清理工作;
、 若是數(shù)據(jù)的UPDATE/DELETE/SELECT操縱條件,與定期清理數(shù)據(jù)的規(guī)則一致或被其包含,則可以考慮使用分區(qū)表,然后借助刪除分區(qū)方式達到數(shù)據(jù)清理的目標;
、 若不能使用分區(qū)表解決的,則可以考慮參考上章節(jié)介紹的“大數(shù)據(jù)量的DELETE OR UPDATE”內容;
(四) M-M架構的大數(shù)據(jù)量DML技巧
定期規(guī)律性數(shù)據(jù)的清理,優(yōu)先對目標表的數(shù)據(jù)操縱方式進行分類:
、 若是日志類型的數(shù)據(jù),則完全可以改為借助分區(qū)表的方式,比如按日期刪除數(shù)據(jù)的條件,則可以用日期作為數(shù)據(jù)分區(qū)條件,然后增刪分區(qū)的方式實現(xiàn)數(shù)據(jù)的清理工作;
、 若是數(shù)據(jù)的UPDATE/DELETE/SELECT操縱條件,與定期清理數(shù)據(jù)的規(guī)則一致或被其包含,則可以考慮使用分區(qū)表,然后借助刪除分區(qū)方式達到數(shù)據(jù)清理的目標;
、 若不能使用分區(qū)表解決的,則可以考慮參考上章節(jié)介紹的“大數(shù)據(jù)量的DELETE OR UPDATE”內容;
關鍵字:MySQL、數(shù)據(jù)庫
新文章:
- CentOS7下圖形配置網(wǎng)絡的方法
- CentOS 7如何添加刪除用戶
- 如何解決centos7雙系統(tǒng)后丟失windows啟動項
- CentOS單網(wǎng)卡如何批量添加不同IP段
- CentOS下iconv命令的介紹
- Centos7 SSH密鑰登陸及密碼密鑰雙重驗證詳解
- CentOS 7.1添加刪除用戶的方法
- CentOS查找/掃描局域網(wǎng)打印機IP講解
- CentOS7使用hostapd實現(xiàn)無AP模式的詳解
- su命令不能切換root的解決方法
- 解決VMware下CentOS7網(wǎng)絡重啟出錯
- 解決Centos7雙系統(tǒng)后丟失windows啟動項
- CentOS下如何避免文件覆蓋
- CentOS7和CentOS6系統(tǒng)有什么不同呢
- Centos 6.6默認iptable規(guī)則詳解