MySQL与PostgreSQL的大表处理性能比较

来自:http://www.oschina.net/question/129318_19029

硬件: Intel E8400 3.0GHz / 4G DDR2 / 1T 7200R HD

操作系统: Windows 7 64bit

MySQL: v5.5.8, 64bit, Server模式配置(Windows下的GUI界面配置工具里的选项,所举典型应用场景为将MySQL安装至Web Server上,使用中等资源)。测试的引擎为InnoDB。

PostgreSQL: v9.0, 64bit, 用EnterpriseDB的tune工具设置为类似MySQL的Server模式(所举典型应用场景同MySQL)

两数据库的数据文件都在同一个磁盘分区,除了上述选择的模式外,无特殊优化。我用程序分别向两者导入了1000万条数据,耗时如下:

MySQL: 21793640ms

PostgreSQL: 12401956ms

导完发现建表时忘了先把索引建好了。不过正好也观察一下大表维护方面哪个更好。结果无语,两个同时建,每个约有七八个索引,PostgreSQL都建好了,MySQL的一个还没建好。最后,MySQL建完这些索引竟花了约12个小时,可能还多。

顺便看下资源占用,MySQL占内存达700M左右,PostgreSQL开了10个进程,每进程内存占用从几百K到几M不等。以上内存占用均在无查询执行的时候。而磁盘空间方面,MySQL占了一百多个G,PostgreSQL为六十几G。

建完索引测SELECT,按日期排序,不做分页的话,取100条数据MySQL花费160ms,PostgreSQL为363ms。分页取第100 万条开始的100条,MySQL需要约3分多钟,PostgreSQL则只用了594ms。两者做count的时间分别为:14s, 28s,MySQL占优势。

另外提一下,MySQL做分页取最后面的数据时发生过临时文件将我C盘(系统盘)占满之后出错的情况。我C盘本来约有44G可用空间。

以上数据说得比较模糊,因为差别比较大,比较明显,我就没有详细记录这些数据。本来是准备用JMeter来做负载测试的,现在看来,直接测是没什么意思了。不分区的情况下,面对大表PostgreSQL明显比MySQL更平稳。这两天我看看做个表分区再对一下。不过提到表分区,看介绍好像 PostgreSQL落后了,因为它分完区还要自己写规则来将INSERT转到对应的分区表,而MySQL则做的看似更像Oracle。


你可能感兴趣的:(MySQL与PostgreSQL的大表处理性能比较)