當在開發的時候有時候需要手動修復數據或者更新數據,一般在自己的項目裡寫一個main函數對數據讀取或者修改即可,但執行的時候要從本地連接外網,
如果數據量很大的時候。幾十萬或者上百萬等以上的話,性能會非常的差,這時候把sql語句寫好放在數據庫裡直接執行會好很多。
在mysql數據庫裡的innodb引擎,一般數據增刪改都有內置的事務的,而且有默認的超時限制,好像是50s,如果數據量大而且很多連接查詢的話會超時,
這時候不妨把連接查詢的數據創建臨時表並對臨時表創建索引,然後添加數據或修改數據對臨時表進行連接關聯,這時候性能會快很多,舉個例子:
DROP TEMPORARY TABLE IF EXISTS tmp;
CREATE TEMPORARY TABLE tmp
select b.UserId,b.field1,b.field2, b.field3 from
(select Max(AutoId) as AutoId
from T_Table2 where UserId
group by UserId) a left join T_Table1 b on a.AutoId=b.AutoId;
ALTER TABLE tmp ADD INDEX `index_UserId` (`UserID` ASC) ;
INSERT INTO T_Table3(`UserId`,`field1`,`field2`,`field3`, `CreateTime`,`CreateIp`,`ModifyTime`,`ModifyIp`)
select a.UserId,a.field1,a.field2,a.field3,now(),'127.0.0.1',now(),'127.0.0.1'
from tmp;
臨時表用完之後要刪除,DROP TEMPORARY TABLE tmp;