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

cnblogs 发布于 2011/04/23 23:27
阅读 10K+
收藏 11

硬件: 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

加载中
0
bastetwang
bastetwang

有myiasm的测试吗?

0
关注
关注

太夸张了 ,我用mysql5.1或5.5,导入单表3000万(10几个字段),占用空间才12G左右,楼主占用100G,不可思议呀,建索引也没有那么慢,最多也就几十分钟而已

0
关注
关注

我3000万的表查询才30秒左右,没有那么低下,postgresql9我也测试过,效率和mysql差不多,用法不一样而已,功能比较多,但是表分区不好用,表空间不好(就是一个文件夹而已),没有作业或事件,得依靠操作系统去做定时任务。

0
钛元素
钛元素

mysql比较方便,postgreSQL功能更多,但我很少用上

0
mark35
mark35

[quote]看介绍好像 PostgreSQL落后了,因为它分完区还要自己写规则来将INSERT转到对应的分区表[/quote]

这一点是有点不方便,需要自己写规则或者触发器来实现写入转向。如果是按照日期来分区倒是可以通过脚本。

返回顶部
顶部