MySQL и скорость выполнения INSERT для разных типов таблиц

Сравнение скорости выполнения INSERT/INSERT DELAYED для таблиц типа HEAP (MEMORY), InnoDB и MyISAM

Я сейчас работаю над очень интересным проектом, который, как надеется заказчик, составит серьёзную конкуренцию Google Analytics. Но речь не об этом. Разбираясь с архитектурой системы, я обнаружил весьма интересную деталь: 8 гигабайт памяти сервера отдается под несколько таблиц типа HEAP. Так как HEAP-таблицы хранятся в исключительно в памяти, то операция вставки (INSERT) должна выполняться очень быстро, [...]

← Вернуться к полной версии записи «MySQL и скорость выполнения INSERT для разных типов таблиц»…

Автор: ; опубликовано в: MySQL, PHP; метки: benchmark, HEAP, InnoDB, MyISAM, speed, storage engine, производительность
20
Мар
2008

RSS Комментарии к статье «MySQL и скорость выполнения INSERT для разных типов таблиц» (4)  »

  1. HEAP InnoDB MyISAM
    INSERT 1.000 1.277 1.162
    INSERT DELAYED 2.125 0.998

    А как эти данные сопоставить с числом запросов, что есть ЕДИНИЦЕЙ в этой таблице??

  2. Я измерял скорость вставки данных относительно скорости выполнения операции INSERT в HEAP-таблицу. То есть все полученные значения делились на значение INSERT(HEAP), и таким образом получались относительные значения.

  3. Тест проведен не объективно. Во первых, функция mt_rand() выполняется достаточно долго, и существенно искажает результаты теста.
    Во вторых, открываем мануал по MySQL (http://www.mysql.ru/docs/man/INSERT_DELAYED.html) и видим
    “INSERT DELAYED работает только с таблицами типа ISAM и MyISAM.”, возникаем вопрос зачем это было тестить на HEAP и InnoDB, если эти таблицы этого не поддерживают?

    идем далее..
    mysql_query(“COMMIT”, $link)
    зачем?? никаких транзакций здесь не было..

    • Тест проведен не объективно.

      :-)

      Во первых, функция mt_rand() выполняется достаточно долго

      Она выполняется для всех типов таблиц. Соответственно, от неё страдают все три типа таблиц. Поэтому и числа приведены не абсолютные, а относительные.

      INSERT DELAYED работает только с таблицами типа ISAM и MyISAM.

      По крайней мере, с MySQL 5.0 это уже не так:

      INSERT DELAYED works only with MyISAM, MEMORY, and ARCHIVE tables.

      HEAP = MEMORY

      возникаем вопрос зачем это было тестить на HEAP и InnoDB, если эти таблицы этого не поддерживают?

      Вы код посмотрите :-) mysql_query("INSERT {$inserts[$i]} INTO `test{$i}` (`field`) VALUES({$val})", $link);

      DELAYED это $inserts[2], что соответствует таблице MyISAM. Попытка выполнить INSERT DELAYED на InnoDB закончится ошибкой.

      зачем?? никаких транзакций здесь не было..

      Для InnoDB SET autocommit=0; вроде как начинает неявную транзакцию.

Пожалуйста, не используйте эту форму для комментирования! Данная форма предназначена исключительно для ботов.

Оставить комментарий к записи «MySQL и скорость выполнения INSERT для разных типов таблиц»

Ваш e-mail не будет опубликован. Обязательные поля помечены *

*

Можно использовать следующие HTML-теги и атрибуты: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>

Оставляя комментарий, вы выражаете своё согласие с Правилами комментирования.

Подписаться, не комментируя

गते गते पारगते पारसंगते बोधि स्वाहा