Przeniesienie niektórych komentarzy z dyskusji do odpowiedzi, z przeformułowaniem i przeformatowaniem.
Zasadniczo sprowadza się to do tego, że chyba, że masz bardzo ekstremalny przypadek, tak naprawdę nie muszą być „śmieciami”. Jeśli nigdy ich nie przyniesiesz, nie ma znaczenia, czy są, czy nie.
Zobacz, transjenty są domyślnie przechowywane w tabeli opcji. W instalacji podstawowej w tabeli opcji może znajdować się może 100 pozycji. Każdy stan przejściowy dodaje dwa kolejne wpisy, ale nawet jeśli masz tysiące, nie wpływają one na szybkość witryny, ponieważ nie są ładowane automatycznie.
Podczas uruchamiania WordPress ładuje opcje do pamięci, ale ładuje tylko opcje z włączoną flagą automatycznego ładowania. Stany przejściowe tego nie dostają, więc nie ładuj się do pamięci. Tylko przejściowe, które zostaną faktycznie wykorzystane później, będą kosztować.
Z perspektywy bazy danych tabela opcji zawiera indeksy zarówno identyfikatora opcji, jak i nazwy opcji. Stany przejściowe są zawsze ładowane na podstawie nazwy (klucza), więc wyszukiwania dla nich zawsze są prostymi zaznaczeniami na podstawie jednej unikalnej wartości klucza. Zatem wyszukiwanie to O (log (n)) i jest super szybkie. Z Big-O log (n), będziesz musiał dostać się do milionów i milionów wierszy, zanim stanie się zauważalny. Szczerze mówiąc, narzut związany z konfiguracją i porzuceniem zapytania, wraz z faktycznym przesyłaniem danych, jest znacznie dłuższy. Dla porównania samo zapytanie działa zasadniczo w czasie zero. Po prostu posiadanie dodatkowych nieużywanych wierszy nie wpływa na nic poza wykorzystaniem dodatkowego miejsca na dysku.
Indeksowanie w bazach danych jest jednym z tych głęboko przeczytanych pomysłów, które nie mają sensu dla osób, które tak naprawdę nie zrozumiały, co dzieje się za kulisami. Bazy danych zostały zaprojektowane z myślą o szybkim wyszukiwaniu danych od podstaw i potrafią poradzić sobie z tego rodzaju sprawami bez problemów. To całkiem dobra lektura: http://en.wikipedia.org/wiki/Index_(database )
Teraz czyszczenie w najbardziej oczywisty sposób (wywoływanie na nich SQL DELETE) tak naprawdę nie usuwa ich z bazy danych. Po prostu usuwa je z indeksu i oznacza wiersz jako „usunięty”. Ponownie, tak właśnie działają bazy danych. Aby faktycznie wyczyścić miejsce na dysku, musisz kontynuować i wykonać OPTYMALIZACJĘ TABELI, a to nie jest szybka operacja. To wymaga czasu. Prawdopodobnie więcej czasu niż jest warte. Prawdopodobnie to nie wystarczy, aby dać ci oszczędność czasu procesora.
Jeśli masz jakiś przypadek, który powoduje ciągłe wstawianie nowych stanów przejściowych, które nie są używane, musisz zamiast tego znaleźć podstawowy problem. Co to jest wstawianie tych stanów przejściowych? Czy używają zmieniającego się lub mutującego klucza? Jeśli tak, to wtyczka lub kod powodujący to powinny zostać naprawione, aby w zasadzie tego nie robić. Będzie to bardziej pomocne, ponieważ jest prawdopodobne, że kod, który nie tworzy ich poprawnie, również ich nie pobiera, a tym samym wykonuje więcej pracy niż musi.
Z drugiej strony może zdarzyć się, że tworzone są transjenty dla czegoś takiego jak każdy post. To może być rzeczywiście do przyjęcia. Robię to sam w SFC, aby przechowywać komentarze przychodzące z Facebooka. Z każdym postem jest powiązany potencjalny stan przejściowy, co oznacza dwa dodatkowe rzędy na post. Jeśli masz 10 000 postów, będziesz mieć 20 000 wierszy w tabeli opcji (ostatecznie). Nie jest to ani złe, ani powolne, ponieważ znowu, pomiędzy bazami danych a 20 000 wierszy jest bardzo mała różnica, o ile bazy danych naprawdę dbają. Wszystko jest indeksowane. Jest szybki jak do cholery. Sub-pod-milisekundy.
Kiedy zaczniesz się układać w miliony rzędów, będę się martwić. Gdy rozmiar tabeli opcji wzrośnie powyżej setek megabajtów, byłbym wystarczająco zainteresowany, aby przyjrzeć się bliżej. Ale ogólnie rzecz biorąc, nie jest to problem, z wyjątkiem ekstremalnych przypadków. Z pewnością nie stanowi to problemu dla czegoś mniejszego niż coś takiego jak duży serwis informacyjny z setkami tysięcy postów. I dla każdej strony wystarczająco dużej, aby stanowiła to problem, powinieneś używać jakiegoś zewnętrznego bufora obiektów, aw takim przypadku transjenty są tam automatycznie zapisywane zamiast w bazie danych.