php - 为什么我没有看到通过实现 MySQL 准备好的语句来提高性能?

标签 php mysql prepared-statement

我有两个版本的代码来做同样的事情。一个使用准备好的语句,另一个使用连接的字符串。我的理解是准备好的语句应该会提高性能,但是在设置 $size=100 之后(因此迭代 10000 次插入查询的代码),我无法检测到这两种方法之间的性能差异。每个都在 appx 中运行。 133 秒。我是否错误地实现了准备好的语句代码?代码如下:

准备好的陈述:

if ($stmt = $mysqli->prepare("INSERT INTO sectors (sector) VALUES (?)"))
{
    for ($x = 0; $x < $size; ++$x)
    {
        for ($y = 0; $y < $size; ++$y)
        {
            $dirtysector = $x . "-" . $y;
            $secstring = clean_sector($dirtysector);
            $stmt->bind_param('s', $secstring);
            $stmt->execute();
         }
}
$stmt->close();

连接字符串:

for ($x = 0; $x < $size; ++$x)
{
    for ($y = 0; $y < $size; ++$y)
    {
        $dirtysector = $x . "-" . $y;
        $secstring = clean_sector($dirtysector);
        $query = "INSERT INTO sectors " . 
                 "(sector) VALUES " .
                 "('$secstring')";
        $result = $mysqli->query($query);
             if(!$result) die("Sector Creation Failed: " . $mysqli->error);         
     }
 }

最佳答案

我会使用某种时间功能来确定您交易的确切速度。

如:

$time = -microtime(true);
// run transactions
$time += microtime(true);
echo $time . ' in seconds to process...';

此外,准备好的语句不一定是为了提高性能而创建的。如果有的话,我会假设他们会放慢速度。准备好的语句是“准备”语句。这意味着他们处理文本,引用任何参数以防止 SQL 注入(inject),并确保 SQL 语句没有任何语法错误。该开销不会带来性能提升。

关于php - 为什么我没有看到通过实现 MySQL 准备好的语句来提高性能?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18664020/

相关文章:

java - mysql准备语句时间戳中的错误?

php - 来自 MySQL 和 PHP 的 Google 条形图

php - PHP Web页面无法使用Wamp Server执行mysqli_num

php - Codeigniter MYSQL 连接作为单个记录返回?

mysql - 触发器@DBMS 出现问题

mysql - 如何在另一个表中缺少值后清理表?

java - 使用 LIKE 时在 Java 中清理 SQL 输入

sql - 是否可以为多个请求准备一次 SQL 语句?

php - CodeIgniter - 消息 : mkdir(): Permission denied on Ubuntu

java - 无法运行 PHP、MySQL、Apache 和 NetBeans(均为 2016 年最新版本)