我在月||id_nr 上索引了大約 2.7 億行,以下更新/洗掉查詢大約需要 4 小時才能完成。我想知道是否有任何其他方法可以更快地進行更新/洗掉。
更新查詢:-
update table_A
set STATUS='Y'
where
month||id_nr in (select distinct month||id_nr from table_A where STATUS='Y');
洗掉查詢:-
Delete from table_B
where
month||id_nr in (select distinct month||id_nr from table_A where STATUS='Y');
uj5u.com熱心網友回復:
為什么是字串連接?并且永遠不要試圖強制 DBMS 在IN子句中使行不同。讓 DBMS 決定它認為查找資料的最佳方法。
所以就:
where (month, id_nr) in (select month, id_nr from table_A where status = 'Y');
我想 id_nr 不是 table_b 中的唯一 ID,否則您不必將它與月份結合起來查看。因此,適當的索引將是:
create index idx_b on table_b (id_nr, month);
或者,如果您在一個月內作業很多,甚至按月對表進行磁區可能是個好主意。這可以極大地加快查詢、更新和洗掉的速度。
對于 table_a 我建議
create index idx_a on table_a (status, id_nr, month);
這是一個覆寫指數。第一列將有助于快速找到所需的行;其他兩列將可用,而無需讀取表格行。
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/518044.html
標籤:sql甲骨文
上一篇:sqlunion和join結合
