標籤:mysql 資料庫
匯出到測試環境
大公司常有生產環境和測試環境,測試環境沒法即時同步生產環境的資料,這就需要我們手工進行同步了。
備份到檔案
我們不需要將生產環境的資料全量匯出到測試環境,只需要滿足部分條件的資料,如最近1個星期的資料,或者最近的100條資料
mysqldump -u使用者名稱 -p密碼 -h生產環境節點 資料庫 資料表 --where "查詢語句" --skip-lock-tables --default-character-set=utf8 --no-create-info --quick > 資料表.sql
匯入到測試環境
mysql -u測試使用者 -p測試密碼 -h測試節點 資料庫名 < Page_Stats.sql
存在則更新,不存在則插入
我們需要定期更新離線資料庫,更新時,可能有重複的資料,即已經存在滿足唯一性索引的資料。這個時候,如果直接刪除資料庫中的資料,可能引出一些BUG。mysql中有一種插入資料庫的寫法,如果資料不存在則插入資料,如果存在滿足唯一性索引的資料,則更新相應資料
INSERT INTO table (column_1, column_2, column_3) VALUES (‘column_1_value‘, ‘column_1_value‘, ‘column_3_value‘) ON DUPLICATE KEY UPDATE column_1=‘column_1_value‘, column_2=‘column_2_value‘, column_3=‘column_3_value‘;
儲存最佳化
假如線上資料庫只記錄了每個廣告主最新的出價資訊,而我們想觀察每個廣告主的曆史出價資訊。那麼每分鐘記錄所有廣告主的出價資訊的話,資料量將會非常大,這個時候,我們就需要對儲存進行最佳化:如果該廣告主出價資訊沒有變化,我們就不需要記錄了
資料庫表
表:coupon_bid_realtime
欄位:coupon bid record_time
唯一索引:coupon record_time
查詢所有廣告主的最近出價資訊
SELECT A.coupon, A.bid, A.record_time FROM coupon_bid_realtime AS A JOIN (SELECT coupon, MAX(record_time) AS record_time FROM coupon_bid_realtime GROUP BY coupon) AS B ON A.coupon = B.coupon AND A.record_time = B.record_time;
過濾沒有變化的資料
根據前面查詢出來的廣告主的出價資訊,如果廣告主沒有變更出價資訊,則不插入
查詢神器
想看自己寫的查詢語句是否充分利用了資料庫的索引,可以使用EXPLAIN,用法EXPLAIN querySQL
著作權聲明:本文為博主原創文章,未經博主允許不得轉載。
MySQL常用指令碼