數據庫中刪除表格數據,一般直接執行 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 ...