sql >> Database teknologi >  >> RDS >> SQLite

SQLite VAKUUM

Oversigt :i denne øvelse vil vi forklare, hvorfor du skal bruge SQLite VACUUM kommando og vis, hvordan den bruges til at optimere databasefilen.

Hvorfor har du brug for SQLite VACUUM kommando

For det første, når du slipper databaseobjekter såsom tabeller, visninger, indekser og triggere eller sletter data fra tabeller, forbliver databasefilstørrelsen uændret. Fordi SQLite bare markerer de slettede objekter som gratis og reserverer det til fremtidige brug. Som et resultat vokser størrelsen af ​​databasefilen altid i størrelse.

For det andet, når du indsætter eller sletter data fra tabellerne, bliver indekserne og tabellerne fragmenterede, især for databasen, der har et stort antal indsættelser, opdateringer og sletninger.

For det tredje skaber indsættelses-, opdaterings- og sletningsoperationerne ubrugt datablok på individuelle databasesider. Det reducerer antallet af rækker, der kan gemmes på en enkelt side. Derfor øger det antallet af sider for at holde et bord. På grund af dette øger det lageroverhead for bordet, tager længere tid at læse/skrive og reducerer cache-ydeevnen.

SQLite leverer VACUUM kommando til at løse alle tre problemer ovenfor.

SQLite kopierer først data i en databasefil til en midlertidig database. Denne operation defragmenterer databaseobjekterne, ignorerer de ledige pladser og ompakker individuelle sider. Derefter kopierer SQLite indholdet af den midlertidige databasefil tilbage til den originale databasefil. Den originale databasefil er overskrevet.

Fordi VACUUM kommandoen genopbygger databasen, kan du bruge den til at ændre nogle databasespecifikke konfigurationsparametre såsom sidestørrelse, sideformat og standardkodning. For at gøre dette skal du indstille nye værdier ved hjælp af pragma og derefter støvsuge databasen.

SQLite VACUUM kommando

VACUUM kommandoen ændrer ikke indholdet af databasen undtagen rowid-værdierne. Hvis du bruger INTEGER PRIMARY KEY kolonnen, VACUUM ændrer ikke værdierne for den kolonne. Men hvis du bruger ualiased rowid, er VACUUM kommandoen nulstiller rowid-værdierne. Udover at ændre rowid-værdierne, er VACUUM kommandoen bygger også indekset fra bunden.

Det er en god praksis at udføre VACUUM kommando med jævne mellemrum, især når du sletter store tabeller eller indekser fra en database.

Det er vigtigt at bemærke, at VACCUM kommandoen kræver lagring for at opbevare den originale fil og også kopien. Også VACUUM kommandoen kræver eksklusiv adgang til databasefilen. Med andre ord, VACUUM kommandoen vil ikke køre med succes, hvis databasen har en afventende SQL-sætning eller en åben transaktion.

I øjeblikket, fra og med version 3.9.2, kan du køre VACUUM kommando på main database, ikke den vedhæftede databasefil.

Selvom SQLite aktiverer autovakuumtilstanden, der udløser vakuumprocessen automatisk med nogle begrænsninger. Det er en god praksis at køre VACUUM kommando manuelt.

Sådan kører du SQLite VACUUM kommando

Det følgende viser, hvordan du kører VACUUM kommando:

VACUUM;Code language: SQL (Structured Query Language) (sql)

Sørg for, at der ikke er nogen åben transaktion, mens du kører kommandoen.

Følgende erklæring aktiverer fuld auto-vakuum tilstand:

PRAGMA auto_vacuum = FULL;Code language: SQL (Structured Query Language) (sql)

For at aktivere inkrementelt vakuum skal du bruge følgende sætning:

PRAGMA auto_vacuum = INCREMENTAL;Code language: SQL (Structured Query Language) (sql)

Følgende sætning deaktiverer automatisk vakuumtilstand:

PRAGMA auto_vacuum = NONE;Code language: SQL (Structured Query Language) (sql)

VACUUM med en INTO klausul

Her er syntaks for VACUUM med INTO klausul:

VACUUM schema-name INTO filename;Code language: SQL (Structured Query Language) (sql)

VACUUM sætning med en INTO klausul beholder den originale databasefil uændret og opretter en ny database med det angivne filnavn. Den nye database vil indeholde det samme logiske indhold som den originale database, men fuldstændig støvsuget.

filename i INTO klausul kan være et hvilket som helst SQL-udtryk, der evalueres til en streng. Det skal være en sti til en fil, der ikke findes eller til en tom fil, eller VACUUM INTO kommando vil resultere i en fejl.

VACUUM kommandoen er meget nyttig til at generere sikkerhedskopier af en live database. Det er transaktionssikkert, idet den genererede database er et konsistent øjebliksbillede af den originale database. Men hvis en uplanlagt nedlukning eller strømsvigt afbryder kommandoen, kan den genererede database blive beskadiget.

Følgende sætning bruger VACUUM INTO kommando for at generere en ny database med filnavnet chinook_backup.db hvis data er kopieret fra main skema af chinook database:

VACUUM main INTO 'c:\sqlite\db\chinook_backup.db';Code language: JavaScript (javascript)

I denne øvelse har du lært, hvorfor du skal bruge SQLite VACUUM kommando og hvordan den køres for at optimere databasen.


  1. Forskellige måder at befolke brugerne af MySQL

  2. Sådan sikkerhedskopieres en SQL Server-database ved hjælp af T-SQL

  3. SQL Server BIT Datatype – Ultimativ guide

  4. SQL til at finde ord med store bogstaver fra en kolonne