php – 不应该准备好更快的语句吗?

$s = explode (" ",microtime());
$s = $s[0]+$s[1];
$con = MysqLi_connect ('localhost','test','pass','db') or die('Err');

for ($i=0; $i<1000; $i++) {

  $stmt = $con -> prepare( " SELECT MAX(id) AS max_id,MIN(id) AS min_id FROM tb ");
  $stmt -> execute();
  $stmt->bind_result($M,$m);
  $stmt->free_result();
  $rand = mt_rand( $m,$M ).'<br/>';

  $res = $con -> prepare( " SELECT * FROM tb WHERE id >= ? LIMIT 0,1 ");
  $res -> bind_param("s",$rand);
  $res -> execute();
  $res->free_result();
}

$e = explode (" ",microtime());
$e = $e[0]+$e[1];
echo  number_format($e-$s,4,'.','');

// and:

$link = MysqL_connect ("localhost","test","pass") or die ();
MysqL_select_db ("db") or die ("Unable to select database".MysqL_error());

for ($i=0; $i<1000; $i++) {
  $range_result = MysqL_query( " SELECT MAX(`id`) AS max_id,MIN(`id`) AS min_id FROM tb ");
  $range_row = MysqL_fetch_object( $range_result ); 
  $random = mt_rand( $range_row->min_id,$range_row->max_id );
  $result = MysqL_query( " SELECT * FROM tb WHERE id >= $random LIMIT 0,1 ");
}

准备好的陈述更加安全
但是每一个地方都说它们要快得多
但在我对上述代码的测试中,我有:
– 准备好的陈述2.45秒
– secon示例5.05秒

你觉得我做错了什么?
我应该使用第二种解决方案,还是应该尝试优化准备工作?

你做错了的是你准备了一千次这个陈述并且只运行一次准备好的陈述.你应该准备一次,并运行一千次.

相关文章

Hessian开源的远程通讯,采用二进制 RPC的协议,基于 HTTP 传输。可以实现PHP调用Java,Python,C#等多语...
初识Mongodb的一些总结,在Mac Os X下真实搭建mongodb环境,以及分享个Mongodb管理工具,学习期间一些总结...
边看边操作,这样才能记得牢,实践是检验真理的唯一标准.光看不练假把式,光练不看傻把式,边看边练真把式....
在php中,结果输出一共有两种方式:echo和print,下面将对两种方式做一个比较。 echo与print的区别: (...
在安装好wampServer后,一直没有使用phpMyAdmin,今天用了一下,phpMyAdmin显示错误:The mbstring exte...
变量是用于存储数据的容器,与代数相似,可以给变量赋予某个确定的值(例如:$x=3)或者是赋予其它的变...