簡體   English   中英

刪除前觸發性能低下

[英]before delete trigger low performance

我也在使用SQLite數據庫連接在QT Creator中編寫C ++應用程序。 我要實現的是,當我從表中刪除一行時,來自其他表的行也將被刪除。 因此,在我的情況下,如果我從“籃子”中刪除一行,那么“計算機”中的引用行也將被刪除,然后從“子系統表”,“訂戶”,“規則”等中刪除,直到最后。

這是我的數據庫圖:

數據庫圖

我為每個具有外鍵引用的表創建了觸發器。

CREATE TRIGGER delete_fk BEFORE DELETE ON Basket
FOR EACH ROW BEGIN 
    DELETE FROM Computer WHERE computer.basket = old.id_basket;
END

CREATE TRIGGER delete_fk_comp BEFORE DELETE ON computer
FOR EACH ROW BEGIN
    DELETE FROM subsystemtable WHERE subsystemtable.computer = id.id_computer;
END

CREATE TRIGGER delete_fk_subscriber_map BEFORE DELETE ON subscriber
FOR EACH ROW BEGIN 
    DELETE FROM mappingtable WHERE mappingtable.subscriber = old.id_subscriber;
END

CREATE TRIGGER delete_fk_subscriber_indirect BEFORE DELETE ON subscriber
FOR EACH ROW BEGIN
    DELETE FROM indirectsubscriber WHERE indirectsubscriber.subscriber = old.id_subscriber;
END

CREATE TRIGGER delete_fk_subscriber BEFORE DELETE ON subscriber
FOR EACH ROW BEGIN
    DELETE FROM reserve WHERE reserve.subscriber = old.id_subscriber;
END

CREATE TRIGGER delete_fk_subscriber_res BEFORE DELETE ON subscriber
FOR EACH ROW BEGIN
    DELETE FROM reserve WHERE reserve.subscriber_res = old.id_subscriber;
END

CREATE TRIGGER delete_fk_subs BEFORE DELETE ON subsystem
FOR EACH ROW BEGIN
    DELETE FROM subsystemtable WHERE subsystemtable.subsystem = old.id_subsystem;
END

CREATE TRIGGER delete_fk_substable_reg BEFORE DELETE ON subsystemtable
FOR EACH ROW BEGIN
    DELETE FROM regulations WHERE regulations.subsystem = old.id;
END

CREATE TRIGGER delete_fk_substable BEFORE DELETE ON subsystemtable
FOR EACH ROW BEGIN 
    DELETE FROM subscriber WHERE subscriber.subsystem = old.id;
END

我得到了我想要的。 它的工作方式完全符合我的要求。 但是我現在的問題是性能低下。 因此,在我的數據庫中,每個購物籃約有20台計算機,然后每台計算機約有5個子系統,每個子系統有100個訂戶,依此類推。 當我刪除1個籃子時,整個過程大約需要400毫秒。 如果我一次刪除3個購物籃,則已經超過3秒了。

我需要找到一種方法來使其更快地工作。 我猜大概限制了200-300毫秒。 我需要任何有關如何做的建議。

您正在手動實現外鍵。 這是沒有必要的。 您可以只使用ON DELETE操作來讓數據庫進行適當的更改。

無論您是手動實現外鍵還是在數據庫的幫助下,都需要在某些鍵列上創建索引 ,否則查找相關行所需的所有查找都會很慢。

暫無
暫無

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

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