記錄一次mysql批量修改大量資料
需求:資料庫欄位point儲存經緯度:116,39,逗號隔開,現在要拆分開 分別存入lon lat
方式1:使用java 程式碼
全部讀入記憶體-----split(",")-------setLon setLat ---------updateById
經過測試,11W資料,耗時3小時以上
方式2:使用mysql儲存過程
-- 建立儲存過程之前需判斷該儲存過程是否已存在,若存在則刪除
DROP PROCEDURE IF EXISTS init_reportUrl;
-- 建立儲存過程
CREATE PROCEDURE init_reportUrl()
BEGIN
-- 定義變數
DECLARE s int DEFAULT 0;
DECLARE temp_id int(10); -- 這個變數是用來放遊標裡的變數資料的
DECLARE temp_point varchar(256); -- 這個變數是用來放遊標裡的變數資料的
DECLARE a1 VARCHAR(122);
DECLARE a2 VARCHAR(122);
-- 定義遊標,並將sql結果集賦值到遊標中
DECLARE report CURSOR FOR select id,point from good_food; -- 定義遊標去拿哪些欄位資料
-- 宣告當遊標遍歷完後將標誌變數置成某個值
DECLARE CONTINUE HANDLER FOR NOT FOUND SET s=1;
-- 開啟遊標
open report;
-- 將遊標中的值賦值給變數,注意:變數名不要和返回的列名同名,變數順序要和sql結果列的順序一致
fetch report into temp_id,temp_point; -- 遊標拿到一條,給上面宣告的變數賦值
-- 當s不等於1,也就是未遍歷完時,會一直迴圈
while s<>1 do
-- 執行業務邏輯
SELECT SUBSTRING_INDEX(temp_point,',',1) into a1; -- 將函式結果 寫入a1
SELECT SUBSTRING_INDEX(temp_point,',',-1) into a2;-- 將函式結果 寫入 a2
update good_food set lon = a1,lat = a2 where id=temp_id; -- 修改lon=a1 lat =a2 條件是id=temp_id ,temp_id是遊標當前拿到的那一條資料的id
-- 將遊標中的值再賦值給變數,供下次迴圈使用
fetch report into temp_id,temp_point;
-- 當s等於1時表明遍歷以完成,退出迴圈
end while;
-- 關閉遊標
close report;
END;
-- 呼叫儲存過程 不呼叫不會執行
call init_reportUrl()
經過測試 :12W資料,修改耗時30s
方式3:使用老式jdbc ,通過遊標獲取next 的方式
還沒測試
總結:遊標為最終使用方式 快捷很多
相關文章
- wdcp修改mysql的資料目錄MySql
- MySQL Cases-記錄大量waiting for handler commitMySqlAIMIT
- mysql誤修改全表記錄,使用binlog日誌找回資料MySql
- 【mysql】【Sequelize】【錯誤記錄】update修改資料後,不返回資料(其實就是mysql不支援)MySql
- 使用Mybatis批量插入大量資料的實踐MyBatis
- Ibatis批量更新資料(mysql資料庫)BATMySql資料庫
- 資料庫mysql學習筆記記錄資料庫MySql筆記
- Mysql批量大資料獲取MySql大資料
- 記錄一次資料儲存出錯
- 記一次 Vagrant 環境下更換 MySQL 資料目錄 datadir 的坑MySql
- 獲取當前修改的行記錄資料
- 記一次mysql資料庫被勒索(下)MySql資料庫
- 記一次mysql資料庫被勒索(中)MySql資料庫
- 利用Python快速批量修改資料集檔名Python
- 【Golang+mysql】記一次mysql資料庫遷移(一)GolangMySql資料庫
- MySQL資料庫遷移與MySQL資料庫批量恢復MySql資料庫
- MySQL:JDBC批量插入資料的效率MySqlJDBC
- MySQL-資料記錄大小寫轉換MySql
- 記一次關於Laravel model查詢返回大量資料的效能優化Laravel優化
- 根據查詢條件批量修改表資料
- 從MySQL大量資料清洗到TiBD說起MySql
- Kettle:Oracle多表格批量同步資料=》mysqlOracleMySql
- GBase XDM(單機/分片叢集)資料庫修改記錄資料庫
- 記錄一次專案資料採集分析-NEWC資料洩漏
- 記錄一次誤刪操作,分享使用 Git 撤銷修改Git
- 記一次MySQL資料遷移到SQLServer全過程MySqlServer
- 【MySQL 資料庫】MySQL目錄MySql資料庫
- 記錄一次獲取czml衛星軌道資料
- 效能提升 48 倍! python redis 批量寫入大量資料優化過程PythonRedis優化
- TestComplete資料驅動測試教程(三)——修改記錄測試
- MySQL 批量更新、刪除資料shell指令碼MySql指令碼
- 批量刪除大量小檔案
- MYSQL資料庫表記錄刪除解決方案MySql資料庫
- 記一次gitlab域名修改Gitlab
- 記錄一次spark連線mysql遇到的問題SparkMySql
- 如何修改MySQL資料庫名稱MySql資料庫
- 記錄一次資料庫CPU被打滿的排查過程資料庫
- sumo筆記(八)——批量修改net中的edge筆記