python删除数据太慢_【大话IT】求救!delete where 删除数据慢

本文介绍了一种通过分区表(TABLE PARTITION)优化大型数据库(如Oracle)性能的方法,特别是针对包含数亿条记录的情况。文章提供了创建分区表的具体示例,并分享了作者的实际经验,包括插入、删除操作的时间消耗及如何平滑地进行表切换。
摘要由CSDN通过智能技术生成

TABLE 設計錯誤, 無關db 是Oracle or ..., 如果不知道要如何區分可以使用, 多翻翻 TABLE PARTITION 文章.

建議你不要使用 parallel DML 方式, 除非你很懂.

建議你不要亂建 index 方式刪除, 保證你可以刪除3小時都還刪除不完.

既使時體資料5億筆資料, 要處理幾萬筆 delete or insert or update  ... 都可以保證幾秒就可以完成.

範例:

CREATE TABLE mian_new1

(

xxx,

id,

...

)

PARTITION BY HASH  (xxx)

(

PARTITION mian_new1

);

xxx 必須是 group 型態, 資料不可是超過 2 萬筆以上.

不知道要如何分, 可以使用 select xxx , count(*) from main group by xxx;

假設是 select xxx , id, count(*) from main group by xxx,id;  比較合理是1千筆或是1百筆, 這要看你的機器一次可以處理極限.

CREATE TABLE mian_new2

(

xxx,

id,

...

)

PARTITION BY HASH  (xxx,id)

(

PARTITION mian_new2

);

你可以先簡單實驗就可以知道.

1. 先建立一個 new TABLE PARTITION , 範例 main_new

2. 在空檔時間使用 insert into main_new select * from main; 先了解insert 會花掉多少時間.

3. 在使用 delete from main_new where xxx=aa and id>12345, 會花掉多少時間.

4. 確定以上方法可以, 再找時間停機制換. 如過年期間停機轉換.

5. 轉換方式很多, 看你設計方式, 不能停機我們都是採用假日交易量少的時間.

都是先將前一天資料轉換好, 切換時間都是晚間22:00pm - 23:00pm 將原本 main table rename  main_old

再將新的 main_new reanme main

再將當天資料 insert into main select * from main_old where 今天資料 or 有異動資料, 這樣就可以轉換好.

再 count main , main_old 是否一致

再 使用小程式筆對 main , main_old 資料是否一致 (for loop ...)

確定一週沒問題就會將 main_old  drop 掉.

建議你就先實驗機上玩一玩你就會了解 TABLE PARTITION 好處.

切錯 TABLE PARTITION 也會快很多, 但不能保證是最快.

你可以多建立幾個 TABLE PARTITION 實驗看看就會知道了.

CREATE TABLE mian_new3

(

xxx,

id,

group_id,

...

)

PARTITION BY HASH  (group_id)

(

PARTITION mian_new3

);

我家裡實驗機有12台, 所以我可以很明確知道在不同等級機器上, 那種方式是最有效率.

如果你是用 VM 方式是驗不出什的效能.

祝你好運

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值