資料庫中其中的乙個表刪除資料的時候特別慢

2021-09-01 08:15:12 字數 1286 閱讀 6399

表中一共只有2000多條資料,我的刪除語句是delete from jx1114 where xnxqh='2011-2012-2'

這個刪除只要刪除80多條資料,但是卻執行了將近3分鐘的時間,這張表引用了其他乙個表的主鍵作為外來鍵。

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

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

2.sql語句本身優化,使用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(*)

----------

34 結束跟蹤:

sql> alter session set sql_trace=false; --關閉trace

session altered.

資料庫表的刪除資料

select from class insert into class classname,classdesc select ssss sfsdfds1 union select ssss sfsdfds2 union select ssss sfsdfds3 union select ssss s...

刪除資料庫中的表及表內資料

如果要刪除資料表中所有資料只要遍歷一下資料庫再刪除就可以了,清除所有資料我們可以使用搜尋出所有表名,構造為一條sql語句進行清除了 使用sql刪除資料庫中所有表是不難的,就是遍歷一下資料庫中所有使用者表,並將它清除,下邊是具體的sql語句,在關鍵部分已經作了詳細的注釋 變數 tablename儲存表...

如何刪除資料庫中的資料?

php mysql delete delete 語句用於從資料庫表中刪除行。刪除資料庫中的資料 delete from 語句用於從資料庫表中刪除記錄。語法 delete from table name where some column some value 注釋 請注意 delete 語法中的 w...