2015-05-02 5 views
2

Я работаю в новом веб-приложении. Я использовал MySQL для веб-приложений. Но теперь я изучаю параметр PostgreSQL. Я сделал простой тест производительности, и я заметил, что PostgreSQL медленнее, чем MySQL.PostgreSQL vs MySQL простая производительность запросов

Когда вы создаете веб-сайт или веб-приложение, вам необходимо обрабатывать несколько запросов инициализации каждого запроса. Мои тесты:

PgSQL 
30000 pgsql execs - 73.53459s 
30000 pgsql execs - 88.41614s 
30000 pgsql execs - 75.76565s 
----------------------------- 
Average    79.23879s 
378 queries per second or ~2.6 ms per query 

MySQL 
30000 mysql execs - 22.19208s 
30000 mysql execs - 17.81079s 
30000 mysql execs - 23.30936s 
----------------------------- 
Average    21,10407s 
~1421 query per second or ~0.7 ms per query 

MySQL пробег ~ 4 раза быстрее, чем PostgreSQL. Нормально ли это? Не могу ли я использовать PostgreSQL для веб-приложения (SAAS) с большим количеством подключений?

* Еще один тест, который я сделал с одновременным доступом, оставил меня очень обеспокоенным.

Код испытания (оба равны и таблицы TESTE только есть 2 записи и индекс id_teste):

<?php 
    $db = new PDO('pgsql:host=127.0.0.1 dbname=teste user=postgres password=123456'); 

    $t = 30000; 
    $ini = microtime(true); 
    for ($i=0;$i<$t;$i++) 
    { 
    $ex = $db->prepare('select * from teste where id_teste = 1'); 
    $ex->execute(); 
    } 
    $end = microtime(true); 
    echo '<b>'. $t .'</b> pgsql execs - <b>'. number_format($end-$ini,5,'.','') .'</b>s'; 
?> 

Обновление: MySQL таблица двигатель Innodb. Оба теста на одном устройстве. я сделал новый тест с mysqli_query и pg_query и результаты были лучше:

30000 pgsql execs - 28.18265s 
30000 pgsql execs - 23.54120s 
30000 pgsql execs - 23.43689s 
Average    25,05358s 
~1197 queries per second or ~0,8 ms per query 


30000 mysql execs - 23.89033s 
30000 mysql execs - 19.40293s 
30000 mysql execs - 27.75116s 
Average    23,68147s 
~1266 queries per second or ~0,79 ms per query 

водитель Может PDO PgSQL проблема, как комментировали или MySQLi медленно.

О других вариантах простого запроса, таких как кеш, да, это вариант, но он содержит много простых запросов в больших таблицах, и эти данные необходимо хранить в СУБД. Пример: Города, люди, пользователи, страницы. Все они использовались там, где id = X. Несмотря на то, что мы больше работаем, мы можем справиться с этим.

+0

Что такое типы таблиц в mysql? –

+0

Я не могу представить себе какое-либо веб-приложение, которое выполняет этот (!) Очень простой запрос в (почти) пустой таблице. Если производительность имеет значение, зачем вводить накладные расходы, например PDO? –

+0

Игрушка микробенчмарк. Если вы хотите получить просто супер высокую производительность по тривиальным запросам, используйте K/V-хранилище, а не RDBMS. Как правило, вы используете что-то вроде Redis в качестве слоя кэширования, а затем RDBMS для постоянного и надежного хранения и аналитики. –

ответ

0

Это зависит от множества факторов - размера стола, индексов, движков в MySQL, ОС.

Для этих сверхпростых запросов Postgres может быть медленнее, чем MySQL. PostgreSQL имеет более богатый планировщик, который лучше работает на более сложных запросах, но по тривиальным запросам медленнее.

Но в вашем примере сильными факторами могут быть и скорость драйвера PDO. Другой вопрос, если вы используете объединение пулов или нет. Без объединения соединений накладные расходы на соединение больше, чем выполнение запроса. Для быстрых запросов необходимо некоторое решение, такое как pgbouncer, pgpool.

В реальном мире реальным узким местом являются скорость ввода-вывода и качество планировщика SQL. Но ваш тест ничего не проверяет.

+0

Соединение выполняется только один раз, не имеет значения в этом «тесте», если вы используете пул соединений или нет. Но вам это нужно :-) –

+0

извините - я ошибся в этом вопросе. –

Смежные вопросы