Rechercher dans le manuel MySQL
8.6.2 Bulk Data Loading for MyISAM Tables
These performance tips supplement the general guidelines for fast inserts in Section 8.2.5.1, “Optimizing INSERT Statements”.
For a
MyISAM
table, you can use concurrent inserts to add rows at the same time thatSELECT
statements are running, if there are no deleted rows in middle of the data file. See Section 8.11.3, “Concurrent Inserts”.With some extra work, it is possible to make
LOAD DATA
run even faster for aMyISAM
table when the table has many indexes. Use the following procedure:Execute a
FLUSH TABLES
statement or a mysqladmin flush-tables command.Use myisamchk --keys-used=0 -rq
/path/to/db/tbl_name
to remove all use of indexes for the table.Insert data into the table with
LOAD DATA
. This does not update any indexes and therefore is very fast.If you intend only to read from the table in the future, use myisampack to compress it. See Section 16.2.3.3, “Compressed Table Characteristics”.
Re-create the indexes with myisamchk -rq
/path/to/db/tbl_name
. This creates the index tree in memory before writing it to disk, which is much faster than updating the index duringLOAD DATA
because it avoids lots of disk seeks. The resulting index tree is also perfectly balanced.Execute a
FLUSH TABLES
statement or a mysqladmin flush-tables command.
LOAD DATA
performs the preceding optimization automatically if theMyISAM
table into which you insert data is empty. The main difference between automatic optimization and using the procedure explicitly is that you can let myisamchk allocate much more temporary memory for the index creation than you might want the server to allocate for index re-creation when it executes theLOAD DATA
statement.You can also disable or enable the nonunique indexes for a
MyISAM
table by using the following statements rather than myisamchk. If you use these statements, you can skip theFLUSH TABLES
operations:To speed up
INSERT
operations that are performed with multiple statements for nontransactional tables, lock your tables:- ...
- UNLOCK TABLES;
This benefits performance because the index buffer is flushed to disk only once, after all
INSERT
statements have completed. Normally, there would be as many index buffer flushes as there areINSERT
statements. Explicit locking statements are not needed if you can insert all rows with a singleINSERT
.Locking also lowers the total time for multiple-connection tests, although the maximum wait time for individual connections might go up because they wait for locks. Suppose that five clients attempt to perform inserts simultaneously as follows:
Connection 1 does 1000 inserts
Connections 2, 3, and 4 do 1 insert
Connection 5 does 1000 inserts
If you do not use locking, connections 2, 3, and 4 finish before 1 and 5. If you use locking, connections 2, 3, and 4 probably do not finish before 1 or 5, but the total time should be about 40% faster.
INSERT
,UPDATE
, andDELETE
operations are very fast in MySQL, but you can obtain better overall performance by adding locks around everything that does more than about five successive inserts or updates. If you do very many successive inserts, you could do aLOCK TABLES
followed by anUNLOCK TABLES
once in a while (each 1,000 rows or so) to permit other threads to access table. This would still result in a nice performance gain.INSERT
is still much slower for loading data thanLOAD DATA
, even when using the strategies just outlined.To increase performance for
MyISAM
tables, for bothLOAD DATA
andINSERT
, enlarge the key cache by increasing thekey_buffer_size
system variable. See Section 5.1.1, “Configuring the Server”.
Deutsche Übersetzung
Sie haben gebeten, diese Seite auf Deutsch zu besuchen. Momentan ist nur die Oberfläche übersetzt, aber noch nicht der gesamte Inhalt.Wenn Sie mir bei Übersetzungen helfen wollen, ist Ihr Beitrag willkommen. Alles, was Sie tun müssen, ist, sich auf der Website zu registrieren und mir eine Nachricht zu schicken, in der Sie gebeten werden, Sie der Gruppe der Übersetzer hinzuzufügen, die Ihnen die Möglichkeit gibt, die gewünschten Seiten zu übersetzen. Ein Link am Ende jeder übersetzten Seite zeigt an, dass Sie der Übersetzer sind und einen Link zu Ihrem Profil haben.
Vielen Dank im Voraus.
Dokument erstellt 26/06/2006, zuletzt geändert 26/10/2018
Quelle des gedruckten Dokuments:https://www.gaudry.be/de/mysql-rf-optimizing-myisam-bulk-data-loading.html
Die Infobro ist eine persönliche Seite, deren Inhalt in meiner alleinigen Verantwortung liegt. Der Text ist unter der CreativeCommons-Lizenz (BY-NC-SA) verfügbar. Weitere Informationen auf die Nutzungsbedingungen und dem Autor.
Referenzen
Diese Verweise und Links verweisen auf Dokumente, die während des Schreibens dieser Seite konsultiert wurden, oder die zusätzliche Informationen liefern können, aber die Autoren dieser Quellen können nicht für den Inhalt dieser Seite verantwortlich gemacht werden.
Der Autor Diese Website ist allein dafür verantwortlich, wie die verschiedenen Konzepte und Freiheiten, die mit den Nachschlagewerken gemacht werden, hier dargestellt werden. Denken Sie daran, dass Sie mehrere Quellinformationen austauschen müssen, um das Risiko von Fehlern zu reduzieren.