php - 准备好的陈述不应该快得多吗?

标签 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 ");
}

defenitly 准备的语句更安全 但也每一个地方都说他们快得多 但是在我对上述代码的测试中,我有: - 准备好的语句 2.45 秒 - 第二个例子 5.05 秒

你认为我做错了什么? 我应该使用第二种解决方案还是应该尝试优化 prep stmt?

最佳答案

你做错的是你准备了语句一千次并且每个准备好的语句只运行一次。您应该准备一次,然后运行一千次。

关于php - 准备好的陈述不应该快得多吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2626239/

相关文章:

mysql - 如果在mysql中n行的其他两列的值相同,则附加第三列的结果

c# - 关于在 C# 中优化代码以提高速度的几个问题

MySQL:为另一个表中的每一行调用游标过程

Mysql查询查找存储在另一个表中的单词

php - 打印机友好网页问题

php - 在我的例子中,如何在 PHP 中阻止既不是管理员也不是工作人员的用户访问某些页面?

javascript - 哪种方法更快?条件 IF 还是数学公式?

caching - 随机光线追踪本质上对缓存不友好吗?

php - Laravel 不能通过外键将两个表相互连接

phpunit 不那么冗长的输出