mysqlslap和mysqli_query之间的时间不同

时间:2017-10-23 19:21:43

标签: php mysql performance

我通过两种不同的方式运行完全相同的查询(在两者上的localhost上)

首先使用mysqlslap

mysqlslap --iterations=100 --query="INSERT INTO table (id, name, distance, latlng, is_waypoint, path_id) VALUES (452, '', 0, 'blablablablablalblalbla', 0, 0);" --create-schema=myschema  --user=myuser

100次执行的总时间:0.035秒。

第二次使用php脚本:

$sql = "INSERT INTO table (`id`, `name`, `distance`, `latlng`, `is_waypoint`, `path_id`) VALUES (452, '', 0, 'blablablablablalblalbla', 0, 0)";
$res = $g_Database->query($sql);

100次执行的总时间:3.215秒。

结果如何如此不同?

它不能成为mysql优化,因为第一个结果显示查询速度很快。 也许php连接?

   <?php


$db_hostname = "localhost";
$db_username = "xxx";
$db_password = "xxx";
$db_database = "xxx";


$iterations = 100;
$timings = array();

$sql = "INSERT INTO table (`id`, `name`, `distance`, `latlng`, `is_waypoint`, `path_id`) VALUES (442, '', 0, '{lat:43.".rand(0,1000) .",lng:1.".rand(0,100) ."}', 0, 0)";

$mysqli = new mysqli($db_hostname, $db_username, $db_password, $db_database);

for ($i = 0; $i < $iterations; $i++) 
{
    $timer = microtime(true);
    $mysqli->query($sql);
    $timings[] = microtime(true) - $timer;
}

echo "<pre>" . PHP_EOL;
echo "Serveur HTTP : " . (isset($_SERVER['HTTP_HOST']) ? $_SERVER['HTTP_HOST'] : "") . PHP_EOL;
echo "Val Min : " . min($timings) . PHP_EOL;
echo "Val Max : " . max($timings) . PHP_EOL;
echo "Val Total : " . array_sum($timings) . PHP_EOL;
echo "Val Avg : " . array_sum($timings) / count($timings) . PHP_EOL;
echo "</pre>";

?>

感谢您的帮助。

1 个答案:

答案 0 :(得分:0)

以下是部分差异的原因,以及基准测试中的缺陷。

如果idPRIMARY KEY,则每次都会收到错误 - 重复密钥442。这会减慢速度。请提供SHOW CREATE TABLE

mysqlslap打开多个连接 - 多少个?每笔交易多少次?让我们看看拍击输出。您的PHP只有一个连接。

PHP代码可能一次提交一个INSERT。 100个刀​​片的3.215s是非常慢的;我希望在HDD上更像是1(在SSD上更快)。

最小值和最大值可能是提供信息的;让我们看看你的输出。

可以每秒插入数千行,但需要比基准测试更精细的代码。

辅助索引可能会减慢速度。我们来看看SHOW CREATE TABLE