MySQL и скорость выполнения INSERT для разных типов таблиц
Сравнение скорости выполнения INSERT/INSERT DELAYED для таблиц типа HEAP (MEMORY), InnoDB и MyISAM
Я сейчас работаю над очень интересным проектом, который, как надеется заказчик, составит серьёзную конкуренцию Google Analytics. Но речь не об этом. Разбираясь с архитектурой системы, я обнаружил весьма интересную деталь: 8 гигабайт памяти сервера отдается под несколько таблиц типа HEAP. Так как HEAP-таблицы хранятся в исключительно в памяти, то операция вставки (INSERT) должна выполняться очень быстро, [...]
← Вернуться к полной версии записи «MySQL и скорость выполнения INSERT для разных типов таблиц»…
Автор: Vladimir; опубликовано в: MySQL, PHP; метки: benchmark, HEAP, InnoDB, MyISAM, speed, storage engine, производительностьМар
2008
Комментарии к статье «MySQL и скорость выполнения INSERT для разных типов таблиц» (4) »
Пожалуйста, не используйте эту форму для комментирования! Данная форма предназначена исключительно для ботов.
Оставить комментарий к записи «MySQL и скорость выполнения INSERT для разных типов таблиц»
गते गते पारगते पारसंगते बोधि स्वाहा
Меня зовут Владимир, я программист-фрилансер, специализирующийся на Web-программировании и програмировании под Linux.
По совместительству занимаюсь администрированием LAMP/LNMP-серверов и техническим переводом.


HEAP InnoDB MyISAM
INSERT 1.000 1.277 1.162
INSERT DELAYED 2.125 0.998
А как эти данные сопоставить с числом запросов, что есть ЕДИНИЦЕЙ в этой таблице??
Я измерял скорость вставки данных относительно скорости выполнения операции
INSERTв HEAP-таблицу. То есть все полученные значения делились на значение INSERT(HEAP), и таким образом получались относительные значения.Тест проведен не объективно. Во первых, функция mt_rand() выполняется достаточно долго, и существенно искажает результаты теста.
Во вторых, открываем мануал по MySQL (http://www.mysql.ru/docs/man/INSERT_DELAYED.html) и видим
“INSERT DELAYED работает только с таблицами типа ISAM и MyISAM.”, возникаем вопрос зачем это было тестить на HEAP и InnoDB, если эти таблицы этого не поддерживают?
идем далее..
mysql_query(“COMMIT”, $link)
зачем?? никаких транзакций здесь не было..
Она выполняется для всех типов таблиц. Соответственно, от неё страдают все три типа таблиц. Поэтому и числа приведены не абсолютные, а относительные.
По крайней мере, с MySQL 5.0 это уже не так:
HEAP = MEMORY
Вы код посмотрите
mysql_query("INSERT {$inserts[$i]} INTO `test{$i}` (`field`) VALUES({$val})", $link);DELAYED это
$inserts[2], что соответствует таблице MyISAM. Попытка выполнитьINSERT DELAYEDна InnoDB закончится ошибкой.Для InnoDB
SET autocommit=0;вроде как начинает неявную транзакцию.