Frage

Ich habe eine Speichertabelle in MySQL für einen Live -Chat (vielleicht ist dies nicht der beste Tischtyp dafür?) Und löscht jeden Abend Zeilen, um die Chat -Protokolle verwaltbar zu halten, die den Overhead in der Tabelle über dem Ausdruck bringen. Da Sie jedoch nicht optimieren können, wie Sie auf einer Speichertabelle optimieren können, wie können Sie den Overhead (Data_free in dem show table status)?

War es hilfreich?

Lösung

Wie werden Sie den Overhead los?

Sie können eine Tabelle mit der Speicher-/Heap -Speicher -Engine erzwingen, um den Restraum aus gelöschten Zeilen wiederherzustellen, indem Sie sie ändern, aber nichts ändern. z.B

ALTER TABLE my_table ENGINE=MEMORY;

Es wird die Tabelle neu schreiben. Sichern Sie das mit einem Zitat von der Dokumentation:

Verwenden Sie den Speicher von Zeilen, die gelöscht wurden, den Speicher, um eine Tabelle wieder aufzubauen.

BEARBEITEN

Vielleicht ist das nicht der beste Tabellentyp dafür?

Es klingt meiner Meinung nach nicht nach der idealen Anwendung einer Speichertabelle - im Großen und Ganzen betrachte ich es als Legacy -Engine. Einige Lebensmittel für den Gedanken

Erstens können Speichertabellen B-Tree-Indizes (Hash-Indizes) nicht verwenden/nicht verwenden, sodass Abfragen, die sonst einen Index für die Bestellung oder Reichweite (dh <,> operations) verwenden könnten, auf die manuelle/ausführliche Sortierung/Filterung zurückgreifen.

Zweitens befinden sich InnoDB -Tabellen im RAM, wenn Ihr innoDB_Buffer_pool groß genug ist, und funktioniert mit gleichzeitigen Threads besser, sodass es häufig so gut ist, wenn nicht besser als eine Speichertabelle für die meisten Anwendungen.

Drittens, vielleicht am wichtigsten, wenn Ihr MySQL jemals ausgeschaltet ist, verlieren Sie alle Daten in Ihrer Tabelle. Es gibt auch Tabellenkürzungsauswirkungen, wenn Sie die Replikation verwenden.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top