不应该准备好的报表要快得多吗?

sil*_*sky 7 php mysql optimization prepared-statement

$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 ");
}
Run Code Online (Sandbox Code Playgroud)

defenitly准备的声明更安全,但也在每个地方说它们更快更快但在我对上述代码的测试中: - 准备好的声明为2.45秒 - 对于secon示例为5.05秒

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

Guf*_*ffa 23

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

  • 为了更清楚,你应该准备一次,然后绑定并执行它一千次. (2认同)