Bulk Data Loading for MyISAM Tables 4. 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” . 5. 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 during  LOAD DATA  because it avoids lots of disk seeks. The resulting index tree is also perfectly balanced. 6. Execute a  FLUSH TABLES  statement or a  mysqladmin flush-tables  command. •To speed up  INSERT  operations that are performed with multiple statements for nontransactional tables, lock your tables: •Connection 1 does 1000 inserts •Connections 2, 3, and 4 do 1 insert •Connection 5 does 1000 inserts 1759 INSERT  is still much slower for loading data than  LOAD DATA , even when using the strategies just outlined. INSERT ,  UPDATE , and  DELETE  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 a  LOCK TABLES  followed by an  UNLOCK 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. 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. 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: 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 are  INSERT statements. Explicit locking statements are not needed if you can insert all rows with a single  INSERT . ALTER TABLE  tbl_name  DISABLE KEYS; ALTER TABLE  tbl_name  ENABLE KEYS; 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 the  FLUSH TABLES operations: LOAD DATA  performs the preceding optimization automatically if the  MyISAM  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 the  LOAD DATA  statement. LOCK TABLES a WRITE; INSERT INTO a VALUES (1,23),(2,34),(4,33); INSERT INTO a VALUES (8,26),(6,29); ... UNLOCK TABLES;