sql >> Database >  >> RDS >> Sqlserver

Hoe grote tabelgegevens in SQL verwijderen zonder logboek?

  1. Als u alle rijen in die tabel verwijdert, is de eenvoudigste optie om de tabel in te korten, zoiets als

     TRUNCATE TABLE LargeTable
     GO
    

Truncate-tabel zal de tabel gewoon leegmaken, u kunt de WHERE-clausule niet gebruiken om de rijen te beperken die worden verwijderd en er worden geen triggers geactiveerd.

  1. Aan de andere kant, als u meer dan 80-90 procent van de gegevens verwijdert, bijvoorbeeld als u in totaal 11 miljoen rijen heeft en u wilt 10 miljoen verwijderen, zou een andere manier zijn om deze 1 miljoen rijen in te voegen (records die u wilt behouden ) naar een andere verzameltabel. Kap deze grote tabel af en voeg deze 1 miljoen rijen terug.

  2. Of als permissies/views of andere objecten die deze grote tabel als onderliggende tabel hebben niet worden beïnvloed door deze tabel te verwijderen, kunt u deze relatief kleine hoeveelheden van de rijen in een andere tabel plaatsen, deze tabel laten vallen en een andere tabel maken met dezelfde schema, en importeer deze rijen terug in deze ex-grote tabel.

  3. Een laatste optie die ik kan bedenken is om de Recovery Mode to SIMPLE en verwijder vervolgens rijen in kleinere batches met behulp van een while-lus, zoiets als dit:

     DECLARE @Deleted_Rows INT;
     SET @Deleted_Rows = 1;
    
    
     WHILE (@Deleted_Rows > 0)
       BEGIN
        -- Delete some small number of rows at a time
          DELETE TOP (10000)  LargeTable 
          WHERE readTime < dateadd(MONTH,-7,GETDATE())
    
       SET @Deleted_Rows = @@ROWCOUNT;
     END
    

en vergeet niet om de herstelmodus terug te zetten naar volledig en ik denk dat je een back-up moet maken om deze volledig effectief te maken (de wijzigings- of herstelmodi).



  1. Een lijst met alle talen in SQL Server (T-SQL) krijgen

  2. Hoe een Oracle-opgeslagen procedure uit te voeren via een databasekoppeling

  3. Waarom is SELECT zonder kolommen geldig?

  4. Is het mogelijk om van Realm naar Sqlite te migreren?