Concurrent inserts
The MyISAM storage engine supports concurrent inserts. This feature allows SELECT statements to be executed during INSERT operations, reducing contetion.
Wether the concurrent inserts can be used or not, depends on the value of the [[|concurrent_insert]] server system variable:
NEVER(0) disables concurrent inserts.AUTO(1) allows concurrent inserts only when the target table has no free blocks (no data in the middle of the table have been deleted after lastOPTIMIZE TABLE). This is the default.ALWAYS(2) always enables concurrent inserts.
If the binary log is used, CREATE TABLE ... SELECT and insert-selectINSERT ... SELECT statements cannot use concurrent insert. Also these statements acquire a read lock on the table, so concurrent insert will need to wait. This way the log can be safely used to restore data.
If an INSERT statement contain the HIGH_PRIORITY clause, concurrent inserts cannot be used. INSERT ... DELAYED keyword are usually unneeded if concurrent inserts are enabled.
LOAD DATA INFILE uses concurrent inserts if the CONCURRENT keyword is specified. This makes the statement slower (even if no other sessions access the table) but reduces contetion.
LOCK TABLES allowes non-conflicting concurrent inserts if READ LOCAL lock is used. Concurrent inserts are not allowed if the LOCAL keyword is omitted.