sql >> データベース >  >> RDS >> Sqlserver

SQL Server 2005 削除クエリが遅い

    クエリは先頭のキー列を参照していないため、インデックスは実際にはクエリをサポートしていません。したがって、このインデックスの有無にかかわらず、テーブル全体をスキャンする必要があります。頻繁に実行するものである場合は、この削除操作をサポートするために、DataPointDate のインデックスのみを検討することもできます。

    DataPointID が IDENTITY 列であり、DataPointDate が順番に入力されている場合は、次のバリエーションも考慮することができます:

    DECLARE @maxID INT;
    
    SELECT @maxID = MAX(DataPointID) 
      FROM dbo.tblTSS_DataCollection
      WHERE [DatapointDate] < DATEADD(D, -7, GETDATE());
    
    DELETE dbo.tblTSS_DataCollection
      WHERE DataPointID <= @maxID;
    

    あなたがすることを検討するかもしれないもう1つのこと(それが削除であり、速度低下の原因となるスキャンではない場合)は、(a)ログに削除に対応するのに十分なスペースがあり、自動拡張の束であなたを殺していないことを確認することです。 b) バッチで作業を実行する:

    BEGIN TRANSACTION;
    
    SELECT 1;
    
    WHILE @@ROWCOUNT > 0
    BEGIN
      COMMIT TRANSACTION;
    
      DELETE TOP (1000) dbo.tblTSS_DataCollection WHERE ...
    END
    
    COMMIT TRANSACTION;
    



    1. コマンドラインでMySQLデータベースをインポートする方法

    2. Slick 3.0を使用してMysqlに接続する-ユーザー名、パスワード、および偽のドライバーがエラーと等しくない

    3. トップ/トップ降順中央値ソリューションの改善

    4. SQL Serverで「datetime」を「date」に変換する(T-SQLの例)