我正在开发一个新的网络应用程序。我已经将 MySQL 用于 Web 应用程序。但现在我正在研究 PostgreSQL 选项。 我做了一个简单的性能测试,我注意到 PostgreSQL 比 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 的运行速度比 PostgreSQL 快 4 倍。 这正常吗?我不能将 PostgreSQL 用于具有大量连接的 Web 应用程序 (SAAS) 吗?
*我对并发访问所做的另一项测试让我非常担心。
测试代码 (equal 和 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 很慢。
关于简单查询的其他选项,如缓存,是的,它是一个选项,但它在大表中有许多简单查询,这些数据需要存储在 RDBMS 中。示例:城市、人物、用户、页面。他们都使用了 id = X 的地方。尽管有更多的工作我们可以处理这个。
最佳答案
这取决于很多因素 - 表大小、索引、MySQL 中的引擎、操作系统。
对于这些超简单的查询,Postgres 可能比 MySQL 慢 - PostgreSQL 有更丰富的规划器,它在更复杂的查询上工作得更好,但在琐碎的查询上更慢。
但在您的示例中,强大的因素也可能是 PDO 驱动程序的速度。另一个问题是您是否使用池连接。如果没有合并连接,连接的开销会比查询执行大。对于快速查询,一些解决方案如 pgbouncer、pgpool 是必需的。
在现实世界中,真正的瓶颈是 IO 的速度和 SQL 规划器的质量。但是您的测试不会从中检查任何内容。
关于mysql - PostgreSQL vs MySQL 简单查询性能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30008388/