簡體   English   中英

優化沒有索引的表的刪除查詢?

[英]optimizing a delete query for table with no index?

假設我們有以下表:r(a,b,c)其中a是一些整數,並且該表有50行s(d,e,f,a)sa是ta上的外鍵,每個元組為400字節s是一個多集,因為這是一個SQL數據庫。 s擁有大約一百萬個元組。 添加表時,數據庫服務器會在表的主鍵列上自動創建索引,例如t在a上具有索引。 但是,Oracle不會在作為外鍵的列上創建索引。 所以s沒有索引。 我們想從t刪除15行。 因此,我們要做的是:1)我們從s中刪除與t中具有相同a值的行。 這需要10分鍾。 2)然后我們運行語句DELETE FROM t WHERE a IN(我們嘗試刪除的值,准確地刪除其中的15個值),這大約需要6個小時。

所以我的猜測是第二步需要很長時間,因為對於t中的每個元組,我們都將a的值與查詢列表中的每個值進行比較。 那么我們如何優化此查詢以獲得相同的結果卻要快得多!

如果使用join for CRUD,操作將比使用IN或子查詢更快

例如:

DELETE FROM t 
INNER JOIN S ON t.a = S.a 

希望這可以幫助

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM