mysql中快速刪除表中某些數據(關聯刪除 / 關聯更新)

數據庫中刪除表格數據,一般直接執行 delete 語句,如:

delete from test where id = ...

delete from test where id in (...)

有時表格中含有大量數據,執行刪除效率會低很多,即使在對應列增加索引,速度也不太讓人滿意,此時可以使用關聯表刪除

-- 創建臨時表,保存要刪除的數據列值,如:order_id 

	CREATE TEMPORARY  table copy_data (
		order_id int
	);

-- 將數據插入到該表中

insert into copy_data (order_id ) (select order_id from test where .......)

-- 執行關聯刪除

delete test from test inner join copy_data on copy_data.order_id = test.order_id

-- delete 後增加要刪除的表 from後是要刪除的主表和關聯的表,使用inner join,且主表在對應列有索引,會使得執行效率高很多

同理,執行更新也可以使用關聯表聯合查詢後更新

update test inner join copy_data on copy_data.order_id = test.order_id

set test.msg = ''

where ....

-- 或者是使用:

update test, copy_data

set test.msg = ''

where copy_data.order_id = test.order_id ...

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章