[英]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.