想象一个跟踪客户之间付款的数据库。
假设我有一个 Customer 表:
Customer
----------
CustomerID
Name
和一个事务表
Transaction
------------
BuyerID
SellerID
Amount
其中 BuyerID 和 SellerID 都是对 Customer 表的 CustomerID 列的外键引用。
在我当前(类似)的情况下,事务表很大(5 亿行),尽管客户表很小(2000 行)。但是,从 Customer 表中删除一行需要很长时间,因为数据库必须扫描 Transaction 表以查看 Customer 是否有任何引用 Transactions(实际上,它必须执行两次 - 一次检查 BuyerID一个用于卖方 ID)。Transaction 表未在 BuyerID 或 SellerID 上编制索引(真实表在买方、卖方和其他一些列的组合上编制索引)
我知道我可以删除所有外键约束,删除行,然后重新添加约束。这会比仅DELETE FROM
启用外键更快吗?有没有其他方法可以加快我缺少的删除操作。