PostgreSQL 与 MySQL 性能大测试(第三节)

解决方案 »

  1.   

     
    本测试文档,采用GPL 协议,如转载请注明出处 : http://blog.bowenye.com/read.php?4  
    如商业,请联系本人  QQ : 84437129
    又经过上一轮的比较(怎么我说"又"了呢), 在多种不定性操作中,PostgreSQL 成绩看上去是很了不起的,而MyISAM竟然去到了最后一名.
    今天我带来的测试,会分开更全方位的测试,简单说就是单种操作中,看看谁会更好,而这种单一的操作,一看上去,好像没啥多大的作用,
    你想一个网站,不可能只有SELECT,而没有UPDATE之类的吧,好,那我再说说,slave这之类的应用听说过吧,比如当你有两台数据库要做成
    读写分离的呢,这时候你就得知道,哪种操作应该放在哪台服务器,而且更高级一些,某些数据存在极其重要的可能性,如果这样,你还得用到混合
    数据库系统呢.OK,费话少说,先看看,上一次测试留下的数据条数,以更公平的测试 
    bowen=> SELECT count(id) from uchome_docomment;
     count  
    --------
     200007
    (1 row)Time: 45.811 msmysql> SELECT count(id) from uchome_docomment_innodb;
    +-----------+
    | count(id) |
    +-----------+
    |    192447 | 
    +-----------+
    1 row in set (0.42 sec)
    mysql> SELECT count(id) from uchome_docomment;
    +-----------+
    | count(id) |
    +-----------+
    |    187426 | 
    +-----------+
    1 row in set (0.00 sec)都差不多,在20W条左右,PHP程序还是第二节的程序,只是注释成单一的操作
    测试规则:
     
    1.select * from TABLE  limit 0,10  (这儿随机)  select * from TABLE  limit 0 offset 10 
    2.select count(id) from TABLE
    3.UPDATE TABLE SET doid = '4' WHERE id = (这儿随机)
    4.INSERT INTO TABLE (upid ,doid ,uid ,username ,dateline ,message ,ip ,grade)VALUES (
     '1', '2', '1', 'myname', '1234567890', 'messagemessagemessagemessagem
     essagemessagemessagemessagemessage
     messagemessagemessagemessagemessage', '127.0.0.1', '2'
    );5.DELETE FROM TABLE WHERE id =(这儿随机)
    5种操作 
    顺序 MyISAM -> PostgreSQL -> InnoDB各种操作次数用for方式操作5W次ok,let's go 
    select的一个改动
    ...
    $start=rand(1,1000);
    $se_sql ="select * from TABLE  limit ".$start.",10";
    ...        hoho ,这次成绩也让大家想不到的时候,上一节领先的PostgreSQL,在第规则(1),中,
    如果limit rand(1,1000) offset 10的时候,时间超过PHP运行默认的30秒,最后只好改为rand(1,100)
    count(id)的过程 PostgreSQL 在5W次FOR过程中也超过PHP默认运行的30秒时间
    所以上两个不会出现在下面的成绩图表了
    看看成绩图表
    图一图二图三图四图五
    这个成绩单,和上一节比起来,很怪疑,在混合操作中,PostgreSQL可以获得这么好成绩,
    而现在单一操作上面却又如此失败,而MyISAM成绩这次真不错,都在4秒内,另一个也吃惊
    的成绩,InnoDB在insert中,竟然去了26秒了,当时为了证实这个结果是没错的,我不得不重测试两次
    结果都差不多.当然是有各自的原因的,在这儿呢,我先不说,卖个关子,当然也很欢迎高手指教
    OK,这节到这儿又完了,接下来,第四节的测试