Тестирование скорости MySQL и postgreSQL
by Евгений Викторович Арбатский - Для расчетов требуется обработать статистику на 10млн. записей. Занес их в две БД - одна на MySQL, другая на postgreSQL (далее pg). Разница лишь в 9 записей (в MySQL больше). СУБД поставлены с настройками по-умолчанию для Mandriva. Эксперименты показали:
1) MySQL очень быстро считает количество записей. Наверно, у него есть счетчик для этого. pg считает за 28.5 сек.
2) SELECT COUNT(*) FROM (SELECT date1, MIN(date2),MAX(date2), MAX(date2)-MIN(date2) AS longa, COUNT(*) AS kolvo, (MAX(date2)-MIN(date2))/COUNT(*) FROM apache_log WHERE ip='172.16.38.13' AND file_type=1 GROUP BY date1) AS subsel;
Время выполнения в MySQL: 2.30 сек.
Время выполнения в pg: 5.50 сек.
Повторное выполнение: MySQL 2.32 сек., pg 0.6 сек.
3) У pg чудесное кеширование - при повторном запросе он ответ выдает менее чем за секунду. MySQL делает повторное вычисление.
4) Чуть более простой запрос на MySQL без индекса по ip делался за 66.7 сек. После создания индекса время снизилось до 11.47 сек. Это еще раз говорит о том, что индексы очень нужны и нельзя о них забывать :)
Выводы: pg хорош для множества однотипных запросов, mysql хорош для разнотипных запросов.
Тестирование проводилось в "тепличных" условиях, выполнение этих запросов от множества пользователей не делалось. Возможно под нагрузкой все будет не совсем так, например, MySQL возможно снизит производительность. Но в целом, MySQL радует тем, что нормально живет на средних объемах данных.
1) MySQL очень быстро считает количество записей. Наверно, у него есть счетчик для этого. pg считает за 28.5 сек.
2) SELECT COUNT(*) FROM (SELECT date1, MIN(date2),MAX(date2), MAX(date2)-MIN(date2) AS longa, COUNT(*) AS kolvo, (MAX(date2)-MIN(date2))/COUNT(*) FROM apache_log WHERE ip='172.16.38.13' AND file_type=1 GROUP BY date1) AS subsel;
Время выполнения в MySQL: 2.30 сек.
Время выполнения в pg: 5.50 сек.
Повторное выполнение: MySQL 2.32 сек., pg 0.6 сек.
3) У pg чудесное кеширование - при повторном запросе он ответ выдает менее чем за секунду. MySQL делает повторное вычисление.
4) Чуть более простой запрос на MySQL без индекса по ip делался за 66.7 сек. После создания индекса время снизилось до 11.47 сек. Это еще раз говорит о том, что индексы очень нужны и нельзя о них забывать :)
Выводы: pg хорош для множества однотипных запросов, mysql хорош для разнотипных запросов.
Тестирование проводилось в "тепличных" условиях, выполнение этих запросов от множества пользователей не делалось. Возможно под нагрузкой все будет не совсем так, например, MySQL возможно снизит производительность. Но в целом, MySQL радует тем, что нормально живет на средних объемах данных.