首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >PostgreSQL与MySQL的简单查询性能

问PostgreSQL与MySQL的简单查询性能
EN

Stack Overflow用户
提问于 2015-05-02 22:51:17
回答 1查看 3.6K关注 0票数 2

我正在一个新的web应用程序中工作。我用过MySQL作为网络应用程序。但现在我正在研究PostgreSQL选项。我做了一个简单的性能测试,发现PostgreSQL比MySQL慢。

当您创建一个网站/web应用程序时,您需要处理每个请求的大量初始化查询。我的测试:

代码语言:javascript
复制
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比PostgreSQL快4倍。是正常的吗?我不能用PostgreSQL来连接大量的web应用程序吗?

*我在并发访问中做的另一个测试让我非常担心。

测试代码(等于和teste表都只有2条记录和一个id_teste索引):

代码语言:javascript
复制
<?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做了一个新的测试,结果更好:

代码语言:javascript
复制
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速度慢。

关于简单查询的其他选项,比如缓存,是的,它是一个选项,但是它在一个大表中有许多简单的查询,这些数据需要存储在RDBMS中。例如:城市,人,用户,网页。它们都在id = X的位置使用,尽管有了更多的工作,我们还是可以处理这个问题。

EN

回答 1

Stack Overflow用户

发布于 2015-05-03 05:44:46

这取决于许多因素--表大小、索引、MySQL、OS中的引擎。

对于这些超简单的查询,Postgres可能比MySQL慢-- PostgreSQL有更丰富的计划器,这在更复杂的查询上工作得更好,但对于简单的查询则更慢。

但是在你的例子中,强大的因素可能是PDO驱动程序的速度。另一个问题是您是否使用池连接。没有池连接,连接的开销比查询执行要大。对于快速查询某些解决方案,如pgbouncer,pgpool是必要的。

在现实世界中,真正的瓶颈是IO的速度和SQL计划器的质量。但你的测试没有检查任何东西。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30008388

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档