大表中大量資料更新問題
最近遇到個大批量資料更新表字段問題,需要將A表中m欄位儲存的字串進行某種統一格式的替換,where條件類似m like ‘aaa%’。源資料有1700萬條,需要更新的資料有200多萬條。因為所更新的欄位沒有索引,如果用 update set from where m like 'aaa%' 更新時需要鎖表,這在生產環境是不允許的。以下是更新資料的方法。
方法:
1、先建立備份表backup,只有主鍵id欄位。
2、取符合更新條件的top(200000)條資料的主鍵id,插入備份表中。這是全表掃描查詢,不會鎖表。
3、使用 update A set m = 'bbb' from A inner join B on A.id = B.id 來關聯更新目標表資料。因為有關聯主鍵id的更新,所以可以通過索引來掃描表,不會鎖表。
4、刪除備份表中的資料。
重複2,3,4,步驟10次就可以更新完資料。
執行時間。
第2步 從1700萬條資料中 like 全表掃描取前200000資料大概需要2,3s時間。
第3步 主鍵id關聯更新大概需要6s時間。
時間上可以接受。
相關推薦
大表中大量資料更新問題
最近遇到個大批量資料更新表字段問題,需要將A表中m欄位儲存的字串進行某種統一格式的替換,where條件類似m like ‘aaa%’。源資料有1700萬條,需要更新的資料有200多萬條。因為所更新的欄位沒有索引,如果用 update set from where m like 'aaa%' 更新
mysql 將A表中的資料更新到B表中
UPDATE table_a t1 INNER JOIN ( SELECT * FROM table_b tt WHERE tt.order_info_id IN ( SELECT
SQL不同伺服器資料庫之間資料操作(當在一個伺服器的某張表中有資料更新時,將更新值通過觸發器插入到另一個伺服器的指定表中)
第一步:在建立觸發器的伺服器上建立連結伺服器 建立連結伺服器有兩種方法:1.通過SQL語言建立,2.通過資料庫管理工具建立,下面分別進行詳細介紹: 1.通過SQL語言建立 通過SQL語言建立連結伺服器方法 2.通過資料庫管理工具建立(這裡以SQL SER
在cm安裝的大資料管理平臺中整合impala之後讀取hive表中的資料的設定(hue當中執行impala的資料查詢)
今天裝了CM叢集,在叢集當中集成了impala,hive。然後一直覺得認為impala自動共享hive的元資料,最後發現好像並不是這樣的,需要經過一個同步元資料的操作才能實現資料的同步。 具體的做法如下: (1)安裝好hive和impala,然後在hive當中建立目標資料庫,建立一張表
在資料(MS-SQL)表中插入資料和更新資料
insert into dbo.time -- insert data (id,name) values(3, 'herry'); update dbo.time1 set id=4 where name='coly' -- update data
SQL Server從讀寫頻繁的大表中刪除大批量資料
如果我們直接用delete from語句來刪除讀寫頻繁的大表中的資料,很有可能會因為where的條件是全表掃描從而導致整個表被鎖住了。如果該表是讀寫頻繁的生產庫那簡直就是一場災難,所有的線上讀寫請求都會因為表被鎖而超時。 如果不想如此糟糕的情況發生,我們可以先分析一下導致表被鎖住的原因。既然全表掃描會會導致
ORACLE大表中刪除部分資料最佳方案
如果業務無法停止的話,主要有這三種思路:=======================================================================================================思路1:根據ROWID分片、
SQL Server 中如何用一個表的資料更新另一個表中的資料
for ACCESS 資料庫: update a, b set a.name=b.name1 where a.id=b.id for SQL Server 資料庫: update a set a.name=b.name1 from a,b where a.id=b.id
大資料||匯出Hive表中的資料
匯出Hive表中的資料方式由很多種。一下就介紹一下方式一:在hive的命令列內insert overwrite local directory '/opt/datas/hive_emp_exp' ROW FORMAT DELIMITED FIELDS TERMINATED
InnoDB引擎,從大表中刪除多行
int ota man erro delete mysql 最小 following 可能 官方建議: InnoDB Tables If you are deleting many rows from a large table, you may exceed the l
MYSQL:如何清空表中的資料
MYSQL:如何清除表中的資料 方法1:delete from 表名;方法2:truncate t
sql查詢庫中所有表中的資料總數
SELECT table_name,num_rows FROM USER_TABLES ORDER BY num_rows DESC USER_TABLES 列說明: table_name -表名tablespace_name -表空間名cluster_name -群集
利用Python將Excel表中的資料匯入Mysql資料庫
python操作Excel 需要匯入xlrd包,可以通過pip install xlrd 一鍵安裝。 #coding=utf-8 ''' python 將指定目錄下的excel檔案匯入到資料庫中 ''' # 引入資料庫包 import pymysql # 引入操作excel包
資料庫中某個表中的某個欄位的值是用逗號隔開的多個值,根據逗號拆分並從另一個表中查出資料返回
有兩個表A,B,表結構如下: A表 B表 關聯關係說明如下: (1)A.hospital_catalog=B.id (2)A表中hospital_catalog欄位的值是以 逗號 “,” 隔開,且兩邊用中括號“[ ]”包起,
刪除資料表中的資料 讓主鍵id 從1開始自增
一、方法1 清空表資料並且將主鍵自增長從1開始 步驟①先清空表資料 步驟②在把表的自增長設定為1 Sql語句: DELETE FROM grade; ALTER TABLE grade AUTO_INCREMENT=1; 二、方法2
執行指令碼獲取mysql表中的資料,報1044錯誤
mysql>use mysql;mysql>grant all on *.* to 資料庫登入名字@"%" identified by "資料庫的密碼";mysql>FLUSH&nb
(轉)刪除表中重複資料sql語句
查詢表中重複資料 select * from employee where employeeId in (select employeeId from employee group by employeeId having count(employeeId) > 1) 刪除表中
從表中插入資料到另外一張表
方法一: 程式碼 1 select into 和 insert into select 兩種表複製語句 2 select * into destTbl from srcTbl 3 4 insert into destTbl(fld1, fld2) sele
mysql中利用遊標遍歷表中的資料時未正常獲取資料
問題描述: mysql中利用遊標遍歷表中的資料時未正常獲取資料 問題重現: 建立儲存過程(mysql) 遊標遍歷的表中對應的資料如下 執行儲存過程時卻並未正常獲取資料 問題分析: 儲存過程中變數的定義不要和我們表中的欄位名相同(不區分大小寫),比如上面問題中的表字段為START
解決一個表中的資料由同表中兩欄位加權和得到(用觸發器解決)
本次實驗一張表中的90%的資料由相關連的外表(b表)資料得到,即用觸發器得到。 https://blog.csdn.net/IT_95/article/details/84064958 那麼如何實現這張表裡面的資料得到一個總的值放在一個欄位呢? 第一時間的想法是在這張表(b表)裡面加觸發