顧客間の支払いを追跡するデータベースを想像してみてください。大きなテーブルで参照される小さなテーブルからの削除
Customer
----------
CustomerID
Name
とトランザクションテーブルBuyerIDとSellerIDは、CustomerテーブルのCustomerID列への外部キー参照の両方である
Transaction
------------
BuyerID
SellerID
Amount
を:
は、私がお客様のテーブルを持っていると言います。
私の現在の(類似した)状況では、顧客テーブルが小さい(2000行)にもかかわらず、取引テーブルは大きく(500万行)です。ただし、Customerテーブルから行を削除すると、トランザクションテーブルをスキャンして参照トランザクションがあるかどうかを調べる必要があるため、非常に時間がかかります(実際には2回実行する必要があります.1つはBuyerID SellerIDの場合は1つ)。取引テーブルはBuyerIDまたはSellerIDのどちらにもインデックスされていません(実際のテーブルはバイヤー、売り手、その他のいくつかの列の組み合わせでインデックスされます)
私はすべての外部キー制約を削除し、次に制約を再追加します。外部キーを有効にしてDELETE FROM
を実行するだけで、これ以上速くなりますか?私が紛失している削除操作を高速化する他の方法はありますか?
あなたの取引テーブルが大きいことを明記し、それが小さいことを明記してください。私はどちらが真実かを判断することはできません。 –
あなたの削除はカスケード接続されていますか? – NullUserException
トランザクションテーブルはBuyerIDまたはSellerIDカラムでインデックスされていますか? – hkutluay