Nie ma możliwości bezpośredniego ograniczenia rozmiaru tabeli tymczasowej, za wyjątkiem zapytania o mniejszą liczbę wierszy w zapytaniu bazowym SQL.
Czy możesz dokładniej określić występujący błąd? Tabele tymczasowe MySQL mogą istnieć w pamięci do mniejszej z tmp_table_size
i max_heap_table_size
. Jeśli tabela temp jest większa, MySQL konwertuje ją na tabelę tymczasową na dysku.
Spowoduje to, że tabela tymczasowa będzie wolniejsza niż przechowywanie w pamięci, ale nie powinna powodować błędu, chyba że you have no space available in your temp directory.
Istnieje również wiele ways MySQL uses memory oprócz przechowywania w tabeli temp. Możesz dostroić zmienne dla wielu z nich, ale to nie to samo, co umieszczenie limitu na pamięci używanej w zapytaniu.
Błąd 1114 wskazuje, że zabrakło miejsca. Jeśli była to tablica InnoDB na dysku, prawdopodobnie oznacza to, że masz plik ibdata1 bez zdefiniowanego automatycznego przejścia dla obszaru tabel. W przypadku tabeli pamięci oznacza to, że osiągasz limit max_heap_table_size.
Ponieważ nie można zmienić wartości max_heap_table_size, można zmniejszyć liczbę wierszy umieszczanych w tabeli w tym samym czasie lub użyć zamiast niej tymczasowej tabeli na dysku zamiast w pamięci.
Należy również zachować ostrożność w używaniu najnowszej wersji głównej wersji MySQL. Znalazłem bug 18160, który podaje nieprawidłowy rozmiar tabeli kalkulacyjnej MySQL dla tabel sterty (używanych w tabelach tymczasowych w pamięci). Na przykład upewnij się, że używasz przynajmniej MySQL 5.0.23 lub 5.1.10, aby uzyskać poprawkę dla tego błędu.
dzięki za odpowiedź, komunikat o błędzie im coraz to [natywny kod: 1114] [Native wiadomość: tabela „dertemp” jest pełna] –
Jak chciałbym użyć tabeli temp na dysku początku mojej zapytanie wygląda jak 'UTWÓRZ TABELĘ TYMCZASOWĄ erebus.dertemp SELECT itp. idzie tutaj" Wyobrażam sobie, że musiałbym zmienić pierwszy bit i umieścić w nim 'on-disk'? –
'STWÓRZ TABELĘ TYMCZASOWĄ erebus.dertemp ENGINE = InnoDB WYBIERZ ...' –