1

スクリプト内の特定のクエリで mysql_query() がすぐに実行される場合と、(ほぼ正確に) 0.1 秒かかる場合があることに気付きました。テストするための簡単なスクリプトを作成しました。

mysql_connect('<server>','<login>','<pass>');
mysql_select_db('<db>');

print microtime(true).'<br />';
mysql_query("select * from `messages` where `sq_id`=1");

print microtime(true).'<br />';
mysql_query("select * from `messages` where `sq_id`=1");

print microtime(true).'<br />';
mysql_query("select * from `messages` where `sq_id`=1");

print microtime(true).'<br />';
mysql_query("select * from `messages` where `sq_id`=1");

print microtime(true).'<br />';

結果はかなり予想外です。

0.02919600 1282686965
0.12934100 1282686965
0.22935700 1282686965
0.32934100 1282686965
0.32985500 1282686965

または、別の機会に、

0.43041500 1282687515
0.52974500 1282687515
0.53034800 1282687515
0.53082400 1282687515
0.63109600 1282687515

なぜmysql_query()このように振る舞うのか、何か考えはありますか?

4

4 に答える 4

1

あなたが観察した効果は、mysqlクエリキャッシュ浮動小数点の不正確さの組み合わせであると思います。

于 2010-08-24T22:34:05.257 に答える
0

サーバーの負荷である可能性があります。

于 2010-08-24T22:41:17.993 に答える
0

ベンチマークを確立するには、5 つの例では不十分です。10万回実行して平均を取ります。それからもう一度やり直して平均を取ります。それらを比較してください。システム負荷、クエリ キャッシュなどの影響は残りますが、100,000 回でその変動の一部が減少します。

于 2010-08-24T22:52:37.663 に答える
0

私の結果は完全に理にかなっています...

1 second + processing time is 1.0010678768158 seconds
query in 0.00055694580078125 seconds
query in 0.00095701217651367 seconds
query in 0.0003049373626709 seconds
query in 0.0012030601501465 seconds
query in 0.0003972053527832 seconds

0.00001 秒から 0.1 秒の間では、MySQL リフトオフ、Apache のダンス、crontab の飛び込みなどを考慮する必要があります...

このようなことを試してください。読みやすくします。

$time_start = microtime(true);
sleep(1);
$time_end = microtime(true);
$time = $time_end - $time_start;
echo "1 second + processing time is actually $time seconds<br />\n";

$time_start = microtime(true);
mysql_query("select * from `messages` where `sq_id`=1");
$time_end = microtime(true);
$time = $time_end - $time_start;
echo "query in $time seconds<br />\n";

$time_start = microtime(true);
mysql_query("select * from `messages` where `sq_id`=1");
$time_end = microtime(true);
$time = $time_end - $time_start;
echo "query in $time seconds<br />\n";

$time_start = microtime(true);
mysql_query("select * from `messages` where `sq_id`=1");
$time_end = microtime(true);
$time = $time_end - $time_start;
echo "query in $time seconds<br />\n";

$time_start = microtime(true);
mysql_query("select * from `messages` where `sq_id`=1");
$time_end = microtime(true);
$time = $time_end - $time_start;
echo "query in $time seconds<br />\n";

$time_start = microtime(true);
mysql_query("select * from `messages` where `sq_id`=1");
$time_end = microtime(true);
$time = $time_end - $time_start;
echo "query in $time seconds<br />\n";
于 2010-08-25T03:26:30.787 に答える