我通过两种不同的方式运行完全相同的查询(在两者上的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>";
?>
感谢您的帮助。
答案 0 :(得分:0)
以下是部分差异的原因,以及基准测试中的缺陷。
如果id
是PRIMARY KEY
,则每次都会收到错误 - 重复密钥442。这会减慢速度。请提供SHOW CREATE TABLE
。
mysqlslap打开多个连接 - 多少个?每笔交易多少次?让我们看看拍击输出。您的PHP只有一个连接。
PHP代码可能一次提交一个INSERT。 100个刀片的3.215s是非常慢的;我希望在HDD上更像是1(在SSD上更快)。
最小值和最大值可能是提供信息的;让我们看看你的输出。
可以每秒插入数千行,但需要比基准测试更精细的代码。
辅助索引可能会减慢速度。我们来看看SHOW CREATE TABLE
。