Erstellen Sie einen Index, ohne die Datenbank zu sperren

8

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.

    
Richard 28.06.2010, 16:45
quelle

3 Antworten

3

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'.

    
Daniel 08.07.2013, 08:18
quelle
2

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.

    
David Menard 28.06.2010 16:47
quelle
0

Stellen Sie sicher, dass der Index erstellt wird bevor die Datensätze eingefügt werden. Auf diese Weise wird der Index auch während der Besetzung der Tabelle gefüllt. Obwohl das länger dauern wird, wird es zumindest fertig sein, wenn die Rake-Aufgabe erledigt ist.

    
Confusion 28.06.2010 19:35
quelle

Tags und Links