PDO 与 MySQLi 二者效率简单比较

优质
小牛编辑
131浏览
2023-12-01

连接效率比较

<?php

$p_start_time = microtime(true);
for ($i = 1; $i <= 100; $i++) {
    $pdo = new PDO('mysql:host=localhost;dbname=test', 'root', 'aaaaaa');
}
$p_end_time = microtime(true);
$res = $p_end_time - $p_start_time; // PDO 连接方式耗时
$m_start_time = microtime(true);
for ($i = 1; $i <= 100; $i++) {
    mysqli_connect('localhost', 'root', 'aaaaaa', 'test');
}
$m_end_time = microtime(true);
$res2 = $m_end_time - $p_start_time; // MySQL 连接方式耗时
var_dump($res, '<br />', $res2);
if ($res > $res2) {
    echo 'PDO 连接数据库是 MySQL 的' . round($res2 / $res) . '倍';
} else {
    echo 'MySQL 连接数据库是 PDO 的' . round($res2 / $res) . '倍';
}

写入速度比较

<?php
// PDO 与 MySQLi 两种连接方式写入效率简单比较

$p_start_time = microtime(true);
$pdo = new PDO('mysql:host=localhost;dbname=test', 'root', 'aaaaaa');
// 写入数据表
$sql = <<<EOF
CREATE TABLE IF NOT EXISTS test(
    id int unsigned not null
)ENGINE=InnoDB CHARSET utf8 comment '写入测试表';
EOF;
$pdo->exec($sql);
// 使用 PDO 预处理语句写入 500 条数据到数据库
$sql = 'INSERT INTO test VALUES(:id)';
$statement = $pdo->prepare($sql);
for ($i = 1; $i <= 500; $i++) {
    $id = 1;
    $statement->bindParam(':id', $id, PDO::PARAM_INT);
    $statement->execute();
}
unset($pdo); // 销毁 PDO 对象
$p_end_time = microtime(true);
$res = $p_end_time - $p_start_time; // PDO 连接方式耗时
$m_start_time = microtime(true);
// 使用 MySQLi 连接方式写入 500 条数据到数据库
$link = mysqli_connect('localhost', 'root', 'aaaaaa', 'test');
for ($i = 1; $i <= 500; $i++) {
    $sql = 'INSERT INTO test VALUES (2)';
    mysqli_query($link, $sql);
}
mysqli_close($link); // 关闭连接
$m_end_time = microtime(true);
$res2 = $m_end_time - $p_start_time; // MySQL 连接方式耗时
var_dump($res, '<br />', $res2);
if ($res > $res2) {
    echo 'PDO 连接数据库写入速度是 MySQL 的' . round($res2 / $res) . '倍';
} else {
    echo 'MySQL 连接数据库写入速度是 PDO 的' . round($res2 / $res) . '倍';
}