Chinaunix首页 | 论坛 | 博客
  • 博客访问: 4186040
  • 博文数量: 601
  • 博客积分: 15410
  • 博客等级: 上将
  • 技术积分: 6884
  • 用 户 组: 普通用户
  • 注册时间: 2007-05-16 08:11
个人简介

独学而无友,则孤陋而寡闻!

文章分类

全部博文(601)

文章存档

2020年(1)

2018年(4)

2017年(7)

2016年(42)

2015年(25)

2014年(15)

2013年(36)

2012年(46)

2011年(117)

2010年(148)

2009年(82)

2008年(37)

2007年(41)

分类: Python/Ruby

2011-05-26 16:45:37

mysql表:2M,5W行:

Mysql连接:

  1. <?php

  2.   $link = mysql_connect('localhost', 'lcms2', 'abcd');
  3.   mysql_select_db("lcms2");
  4.   mysql_query("SET NAMES 'utf8'");

  5.   $time = microtime(1);

  6.   for ($i=1; $i<10000;$i ) {
  7.        $sql = "SELECT * from `cl_translation` WHERE `varName`='my group'";

  8.        $result = mysql_query($sql,$link);
  9.        if (!$result) {
  10.                   echo "Could not successfully run query ($sql) from DB: " . mysql_error();
  11.                           exit;
  12.            }

  13.        $rows = array();

  14.       while ($row = mysql_fetch_assoc($result)) {
  15.           $rows[] = $row;

  16.           }
    }

  1.   $intval_time = microtime(1) - $time;
  2.   echo $intval_time . "
    "
    ;

  3.   var_dump($rows);


  4.   ?>

PDO连接代码:

  1. <?php

  2.   $dsn = "mysql:dbname=lcms2;host=localhost";
  3.   $user = "lcms2";
  4.   $password = "abcd";

  5.   try{
  6.           #$dbh = new pdo($dsn, $user, $password,array(PDO::ATTR_PERSISTENT => true));
  7.           $dbh = new pdo($dsn, $user, $password);
  8.   } catch (PDOException $e){
  9.           echo "Connetion failed: " . $e->getMessage();
  10.   }
  11.   $dbh->exec("SET NAMEs 'utf8'");
  12.   $ph = array();

  13.   $time = microtime(1);

  14.           $sql = "SELECT * from `cl_translation` WHERE `varName`=:string";

  15.           $ph[0] = $dbh->prepare($sql);
  16.   for ( $i=1; $i<10000; $i ) {

  17.           $ph[0]->execute(array('string'=>'my group'));

  18.   }
  19.   $result = $ph[0]->fetchAll();

  20.   $intval_time = microtime(1) - $time;
  21.   echo $intval_time . "
    "
    ;

  22.   var_dump($result);


  23.   ?>

pdo直接查询,不用prepare语句:

  1. <?php
  2.   $time = microtime(1);


  3.   $dsn = "mysql:dbname=lcms2;host=localhost";
  4.   $user = "lcms2";
  5.   $password = "lsrzlcms";

  6.   try{
  7.           #$dbh = new pdo($dsn, $user, $password,array(PDO::ATTR_PERSISTENT => true));
  8.           $dbh = new pdo($dsn, $user, $password);
  9.   } catch (PDOException $e){
  10.           echo "Connetion failed: " . $e->getMessage();
  11.   }
  12.   $dbh->exec("SET NAMEs 'utf8'");
  13.   $ph = array();

  14.   for ( $i=1; $i<10000; $i ) {

  15.           $sql = "SELECT * from `cl_translation` WHERE `varName`='my group'";

  16.           $ph = $dbh->query($sql);
  17.           if ( !$ph ) {
  18.                   var_dump($dbh->errorInfo());
  19.                   die("Error when execute query" );
  20.           }
  21.   }

  22.   $result = $ph->fetchAll();

  23.   $dbh=NULL;

  24.   $intval_time = microtime(1) - $time;
  25.   echo $intval_time . "
    "
    ;

  26.   var_dump($result);


  27.   ?>



连接结果:

第一次: 0.014165878295898s
0.00062799453735352
0.00014495849609375

改变id值
0.00049090385437012

0.00012493133544922


改变prepare的值:

0.051913022994995

0.00035595893859863
0.00033116340637207


mysql驱动:
0.00032401084899902
0.00030779838562012



mysql 1000次
0.30312514305115
0.30235195159912

mysql 10000次:
3.0247800350189
3.043329000473
3.0260350704193

pdo 10000次,包括prepare内的循环:
0.89934897422791
0.89384698867798

pdo 10000次,不包括prepare内的循环,只循环excute:
0.79944610595703
0.79354596138

pdo 不用statements语句,直接查询:
0.877690076828
0.81276917457581
0.82689189910889

---------------------------------------------------
害死人了,for后忘了加大括号,导致第一次进行mysql_select时,没有执行数据库查询!!!

pdo的效率还是很高的,终于松了一口气!

另外:PDO::MYSQL_ATTR_USE_BUFFERED_QUERY好像没有作用。

保持连接对pdo查询影响不大,只影响连接。




阅读(5644) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~