W MySQL, jak długo trwa „ZMIEŃ TABELĘ… WYŁĄCZ KLUCZE;” ostatnie oświadczenie?

12

Jeśli wyłączysz klucze (zawieszanie indeksowania) w tabeli mysql INNODB, jak długo potrwa to ustawienie?

W przypadku zapytania takiego jak:

ALTER TABLE users DISABLE KEYS;

Czy klucze zostaną ponownie włączone na końcu skryptu? czy trwają, dopóki nie włączysz indeksowania?

Daniel Beardsley
źródło
To pytanie zasługuje na +1 za pomoc innym w zrozumieniu DISABLE KEYS, ENABLE KEYS i InnoDB.
RolandoMySQLDBA
Zobacz także dba.stackexchange.com/a/76590/1653
Matthew Read

Odpowiedzi:

7

Dokładna instrukcja (która jest warta przeczytania) sugeruje, że efekt tej instrukcji trwa do momentu wykonania odpowiedniej ALTER TABLE ... ENABLE KEYSinstrukcji.

womble
źródło
6

W rzeczywistości ZMIENIĆ TABELĘ ... WYŁĄCZYĆ KLUCZE i ZMIEŃ TABELĘ ... WŁĄCZYĆ KLUCZY nie działają !!!!

Odpowiedziałem na to w 13 lutego 2011 r.

Zrobiłem dodatkowe kopanie i dowiedziałem się od firmy macierzystej InnoDB, InnoBase Oy (zanim otrzymałem 7 z 9 w Oracle Borg), że tak właśnie jest.

Ten link sugeruje jednoczesne wyłączanie kluczy i wyłączanie kluczy obcych. Chociaż myślę, że oba są niepotrzebne, najwyraźniej to działało dla kogoś.

AKTUALIZACJA 2011-07-18 12:35 EDT

To bardzo dobre pytanie, ponieważ ujawnia zło, które pozostało w MySQL. Program mysqldump ślepo upuszcza DISABLE KEYS i ENABLE KEYS wokół tworzenia i ładuje każdą tabelę bez względu na silnik pamięci. Ponieważ DISABLE KEYS i ENABLE KEYS nie działają (w najlepszym przypadku nie mają wpływu) na tabele InnoDB, ponieważ działają poprawnie dla MyISAM, ten nieznany fakt powinien być lepiej udokumentowany przez społeczność MySQL. O tak, MySQL jest w środku Imperium Galaktycznego znanego jako Oracle. Nie będę wstrzymywał się z nadchodzącymi zmianami w dokumentacji.

RolandoMySQLDBA
źródło
3
Złożenie oświadczenia to jedno. Krzyczenie go za pomocą zarówno wielkich, jak i pogrubionych czcionek jest nieco nadmierne i całkowicie niepotrzebne.
John Gardeniers
1
@John: Przepraszam, że jestem zbyt entuzjastyczny. Nie jestem zły na nikogo. ALTER TABLE DISABLE / ENABLE KEYS against InnoDB nie jest dobrze udokumentowane. Oracle też nie będzie poprawiać rzeczy.
RolandoMySQLDBA
@RolandoMySQLDBA czy istnieje jakieś obejście, aby uniknąć umieszczania przez mysqldump DISABLE KEYS i ENABLE KEYS w pliku zrzutu?
pahnin