Powiedziałbym, że poza transakcją. Z pewnością w PostgreSQL, VACUUM ma na celu usunięcie "martwych" krotek (tj. Starego wiersza, gdy rekord został zmieniony lub usunięty).
Jeśli używasz VACUUM w transakcji, która zmodyfikowała rekordy, te martwe rzędy nie zostanie oznaczony do usunięcia.
W zależności od typu WYCENY, które wykonujesz, może również wymagać blokady tabeli, która zablokuje, jeśli są uruchomione inne transakcje, więc możesz potencjalnie znaleźć się w sytuacji zakleszczenia (transakcja 1 jest blokowana w oczekiwaniu na blokada stołu, aby wykonać VACUUM, transakcja 2 zostanie zablokowana, czekając na zwolnienie wiersza, że transakcja 1 została zablokowana.)
Polecam również, aby nie było to zrobione w aplikacji (być może jako zaplanowane zadanie) ponieważ może to zająć trochę czasu i może negatywnie wpłynąć na szybkość innych zapytań.
Jeśli chodzi o SQL Server, nie ma VACUUM - to, czego szukasz, jest mniejsze. Możesz włączyć automatyczne zmniejszanie w 2005 roku, które automatycznie odzyska miejsce po wybraniu serwera lub wyda polecenie DBCC, aby zmniejszyć bazę danych i plik dziennika, ale zależy to od procedury tworzenia kopii zapasowych i strategii na poziomie bazy danych.
Odbywa się to po procesie synchronizacji mobilnej.Poprzednia transakcja dokonuje wielu modyfikacji w bazie danych. Ponieważ odbywa się to na urządzeniach mobilnych, muszę wydać VACUUM, aby skompaktować bazę danych. – Pentium10