Возникла задача — вставить множество (десятки миллионов записей) в базу данных.
Вот такая схема:
<font color="black"><font color="#0000ff">CREATE</font> <font color="#0000ff">TABLE</font> <font color="#0000ff">IF</font> <font color="#0000ff">NOT</font> <font color="#0000ff">EXISTS</font> `TaskSolution_60` (<br/>
`id` <font color="#0000ff">int</font>(11) unsigned <font color="#0000ff">NOT</font> <font color="#0000ff">NULL</font> AUTO_INCREMENT,<br/>
`period` <font color="#0000ff">int</font>(11) unsigned <font color="#0000ff">NOT</font> <font color="#0000ff">NULL</font>,<br/>
`totalCost` <font color="#0000ff">int</font>(11) unsigned <font color="#0000ff">NOT</font> <font color="#0000ff">NULL</font>,<br/>
`totalDepricateCost` <font color="#0000ff">int</font>(11) unsigned <font color="#0000ff">NOT</font> <font color="#0000ff">NULL</font>,<br/>
`totalDevelopeCost` <font color="#0000ff">int</font>(11) unsigned <font color="#0000ff">NOT</font> <font color="#0000ff">NULL</font>,<br/>
`totalNewCost` <font color="#0000ff">int</font>(11) unsigned <font color="#0000ff">NOT</font> <font color="#0000ff">NULL</font>,<br/>
`totalRunningCost` <font color="#0000ff">int</font>(11) unsigned <font color="#0000ff">NOT</font> <font color="#0000ff">NULL</font>,<br/>
`ak0` <font color="#0000ff">int</font>(11) unsigned <font color="#0000ff">NOT</font> <font color="#0000ff">NULL</font>,<br/>
`ak1` <font color="#0000ff">int</font>(11) unsigned <font color="#0000ff">NOT</font> <font color="#0000ff">NULL</font>,<br/>
`ak2` <font color="#0000ff">int</font>(11) unsigned <font color="#0000ff">NOT</font> <font color="#0000ff">NULL</font>,<br/>
`ak3` <font color="#0000ff">int</font>(11) unsigned <font color="#0000ff">NOT</font> <font color="#0000ff">NULL</font>,<br/>
`ak4` <font color="#0000ff">int</font>(11) unsigned <font color="#0000ff">NOT</font> <font color="#0000ff">NULL</font>,<br/>
`status` <font color="#0000ff">int</font>(11) unsigned <font color="#0000ff">NOT</font> <font color="#0000ff">NULL</font> <font color="#0000ff">DEFAULT</font> <font color="#A31515">'0'</font>,<br/>
<font color="#0000ff">PRIMARY</font> <font color="#0000ff">KEY</font> (`id`)<br/>
) ENGINE=MEMORY <font color="#0000ff">DEFAULT</font> CHARSET=cp1251 AUTO_INCREMENT=1;<br/>
</font><br/>
<font color="gray">* This source code was highlighted with <a href="http://virtser.net/blog/post/source-code-highlighter.aspx"><font color="gray">Source Code Highlighter</font></a>.</font>
Такой запрос:
<font color="black"><font color="#0000ff">INSERT</font> <font color="#0000ff">INTO</font> TaskSolution_60 <font color="#0000ff">SET</font> totalCost=10, totalDepricateCost=9, totalDevelopeCost=8, totalNewCost=7, totalRunningCost=6,ak0=5,ak1=4,ak2=3,ak3=2,ak4=1,period=0</font><br/>
<br/>
<font color="gray">* This source code was highlighted with <a href="http://virtser.net/blog/post/source-code-highlighter.aspx"><font color="gray">Source Code Highlighter</font></a>.</font>
У меня получилась скорость всего
16 000 вставок в секунду, что кажется очень мало.
Экспериментирую на ENGINE = MEMORY.
Пробовал использовать LOCK TABLES WRITE, а также DISABLE KEYS.
statement prepare только замедляет процесс.
рекомендации вроде
mysql.ru/docs/man/SEC463.html и
dev.mysql.com/doc/refman/5.0/en/insert-speed.html
проверял на различных операционных системах и своих серверах, везде результат примерно одинаковый.
Прошу советы по возможным хитрым оптимизациям.
Хотелось бы увеличить скорость вставки в 10 раз, поэтому рассматривается вариант отказаться от Mysql и использовать другую СУБД, возможно nosql. Рекомендации приветствуются!