我以两种不同的方式运行完全相同的查询(在两种方式的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>";
?>谢谢你的帮助。
发布于 2017-10-25 14:47:32
以下是产生差异的一些原因,以及基准测试中的缺陷。
如果id是PRIMARY KEY,那么每次都会收到一个错误--重复键442。这让事情变慢了。请提供SHOW CREATE TABLE。
mysqlslap打开了多个连接-多少?每个事务有多少次插入?让我们看看拍子的输出。您的PHP将只有一个连接。
PHP代码可能一次只提交一个插入。3.215 s对于100个插入件来说是不合理的慢;我希望在HDD上更像1s (在SSD上更快)。
min和max可能是信息丰富的;让我们看看您的输出。
每秒插入数千行是可能的,但需要比基准测试更高级的代码。
次级指数可能正在放缓。让我们看看SHOW CREATE TABLE。
https://stackoverflow.com/questions/46896991
复制相似问题