Zakładając, że używasz silnika transakcyjnego (zwykle Innodb), wyczyść i uzupełnij tabelę w tej samej transakcji.
Upewnij się, że czytelnicy używają READ_COMMITTED lub wyższego poziomu izolacji transakcji (domyślnie jest to READ REPEATABLE, który jest wyższy).
W ten sposób czytelnicy będą nadal mogli czytać starą zawartość tabeli podczas aktualizacji.
Należy uważać na kilka rzeczy:
- Jeśli tabela jest tak duża, że wyczerpuje obszar wycofywania — jest to możliwe, jeśli zaktualizujesz całą (powiedzmy) tabelę rzędu 1M. Oczywiście można to dostosować, ale istnieją ograniczenia
- Jeśli transakcja nie powiedzie się w połowie i zostanie wycofana - wycofywanie dużych transakcji jest BARDZO nieefektywne w InnoDB (jest zoptymalizowane pod kątem zatwierdzeń, a nie wycofywania)
- Uważaj na zakleszczenia i limity czasu oczekiwania na blokadę, które są bardziej prawdopodobne, jeśli używasz dużych transakcji.