多表級聯刪除表資料特別慢

2025-05-28 11:40:23 字數 1582 閱讀 5729

1樓:網友

刪除表記錄非常慢有好幾個原因:

1.機器效能問題,cpu被其他程序佔用。這種方式最好解決,在程序管理器中關掉幾個程序,釋放出cpu用於處理刪除記錄操作;

語句本身優化,使用exists或者not exists比用「=」來的快;

3.表的關聯關係影響了刪除的速度。如果目標表和其它表建立了關聯關係過多也會造成處理效率下降問題。

如a表的和b表建立外關聯的話,而b表又是一張很手吵大的表,刪除a表的記錄時oracle執行過程是先在a表中選中一條記錄進入待刪除區,然後進行關聯關係分析的,就是對b表進行全表查詢一遍。同理如果a表和其它表 也有關聯的話相同的查詢也會在其它表中執行查詢,等所有關聯表查詢完成確定沒有引用關係的話,a表中選中記錄會被打沒猜乙個可以刪除的標記,然後執行a表下一條的查詢工作。值得注意的是被標記為可刪除標記的記錄不是立刻被刪除的,刪除操作一直要等到a表符合刪除記錄全部被打成可刪除標記,刪除操作才會被執行。

如果有一條沒有被標記成可刪除標識的話,oracle 資料庫會根據你設定給出相應的處理。

4.表與表引用關係儲存在系統表dba_constraints 中,要有dba許可權才能夠執行的。查詢語句如下:注意要更換'tablename':

select owner,constraint_name,constraint_type,table_name

from dba_constraints

where r_constraint_name in (select constraint_name from dba_constraints where table_name='tablename');

如果這個還不能解決問題的話。還有更復雜的辦法。

5.使用oralce自帶10046 的trace。該方法使用方法需要謹慎的,隨用隨關的。啟用當前session的跟蹤:

sql> alter session set sql_trace=true; -開枯薯型啟trace

session altered.

此時的sql操作將被跟蹤:

sql> select count(*)from dba_users;

count(*)

結束跟蹤:sql> alter session set sql_trace=false; -關閉trace

session altered.

2樓:小吳

觸發器問題。刪除表資料特別慢是觸發器團毀問題。那些慶枯觸發器使事情放慢了很多,因為那些級聯的刪除非常慢,通過在引用表上的外來鍵欄位上建立索引來解決塌差備這個問題。

3樓:網友

機器效能問題,cpu被其他程序佔用。這種方式掘咐最好解決,在程序管理器中手塵關掉幾個程序,釋放出cpu用於處理刪除記錄操作;

sql語句本身優化,使用exists或者not exists比用「=」來的快;

表的關聯關係判薯純影響了刪除的速度。如果目標表和其它表建立了關聯關係過多也會造成處理。

4樓:花落淋逍

觸發器問題。pgsql刪除表資料特態局別慢是觸發器問題。那些觸發備謹器帆滾讓使事情放慢了很多,因為那些級聯的刪除非常慢,通過在引用表上的外來鍵欄位上建立索引來解決這個問題。

資料庫,資料庫sql命令,刪除多表關聯索引資料

按樓上的說得,不過在最後改下,只要刪除賬號表,然後在後面加個cascade,它表示級聯刪除,就是和要刪除的賬號表上的賬號有關聯的都會刪除,不過事先你先得將表的關聯建好 人物表中的 賬號id 要引用 賬號表的 賬號id 就是外來鍵的意思,下面的表類似。寫 sql 就可以這樣寫 delete from ...

excel中多表資料合併到一張表上

你是說對10個表中所有的資料求和嗎?假設你的總表在sheet11,a1單元格是需要求和的資料,你在a1中輸入 sum sheet1 sheet10 a1 然後複製這個公式到所有需要求和的單元格當中應該就可以了,你試試看 2007中若要彙總和報告多個單獨工作表的結果,可以將每個單獨工作表中的資料合併計...

SQL語言中,刪除表中所有資料,但保留表結構的命令是

sql語言刪除一個表中所有資料使用delete子句。該子句只刪除資料,對錶結構沒有影響。一 語法為 delete from table where 二 例 tt 1 刪除 所有資料 delete tt 2 使用where 子句選擇性刪除,比如 刪除 v1 1 的資料delete tt where v...