Ich habe eine Tabelle mit mehr als 10 Millionen Zeilen. Ich muss einen Index für eine einzelne Spalte erstellen, der Index dauert jedoch so lange, dass ich Sperren für die Tabelle erhalte.
Es ist wichtig zu beachten, dass der Index als Teil eines 'rake db: migrate' Schritts erstellt wird ... Ich bin nicht dagegen, den Index manuell zu erstellen, wenn das funktioniert.
UPDATE: Ich denke, ich hätte erwähnen sollen, dass dies eine Tabelle schreibt.
Die MySQL NDBCLUSTER-Engine kann den Index online erstellen, ohne die Schreibvorgänge in der Tabelle zu sperren. Die am häufigsten verwendete InnoDB-Engine unterstützt diese Funktion jedoch nicht. Ein weiterer freier und Open-Source-DB Postgres unterstützt 'Create Index gleichzeitig'.
Sie können die Blockierung mit etwas wie diesem (Pseudocode) verhindern:
%Vor%Wo Logger wäre was auch immer Zeilen / Updates zu Ihrer Tabelle im regulären Gebrauch (zB: PHP-Skript) fügt. Dadurch wird eine temporäre Tabelle eingerichtet, die verwendet wird, während die andere aktualisiert wird.
Tags und Links mysql ruby-on-rails rake