これが重複しているとは思いません。探しましたが、正確に何と呼ぶべきかまったくわかりませんでした。
別のループの 10 倍のループの実行に 10 倍の時間がかからない理由を知りたいです。
私は自分のウェブサイトをより速く、より反応的にする方法を見つけるためにいくつかのテストを行っていたので、microtime()
前と後の関数を使用していました. 私の Web サイトでは、テーブル全体を調べずに、特定の属性を持つテーブル行のリストを引き出す方法がわかりません。これが原因で速度が低下しているかどうかを知りたかったのです。
したがって、次のループを使用します。
echo microtime(), "<br>";
echo microtime(), "<br>";
session_start();
$connection = mysqli_connect("localhost", "root", "", "") or die(mysqli_connection_error());;
echo microtime(), "<br>";
echo microtime(), "<br>";
$x=1000;
$messagequery = mysqli_query($connection, "SELECT * FROM users WHERE ID='$x'");
while(!$messagequery or mysqli_num_rows($messagequery) == 0) {
echo('a');
$x--;
$messagequery = mysqli_query($connection, "SELECT * FROM users WHERE ID='$x'");
}
echo "<br>";
echo microtime(), "<br>";
echo microtime(), "<br>";
次の出力と同様の出力が得られました。
0.14463300 1376367329
0.14464400 1376367329
0.15548900 1376367330
0.15550000 1376367330 < these two
[a's omitted, for readability]
0.33229800 1376367330 < these two
0.33230700 1376367330
〜18〜20マイクロ秒、それほど悪くはありません。誰もそれに気づきません。それで、私のウェブサイトが成長するとどうなるのだろうと思いました。検索するテーブル行が 10 倍 (10,000) あるとどうなるでしょうか?
0.11086600 1376367692
0.11087600 1376367692
0.11582100 1376367693
0.11583600 1376367693
[lots of a's]
0.96294500 1376367694
0.96295500 1376367694
~83-88 マイクロ秒。180 ~ 200 マイクロ秒ではないのはなぜですか? ループの開始と停止に時間がかかるかどうかなど。
更新:変数を追加するのがmySQLであるかどうかを確認するために、mySQLなしでテストしました:
echo microtime(), "<br>";
echo microtime(), "<br>";
session_start();
$connection = mysqli_connect("localhost", "root", "W2072a", "triiline1") or die(mysqli_connection_error());;
echo microtime(), "<br>";
echo microtime(), "<br>";
$x=1000000;
while($x > 10) {
echo('a');
$x--;
}
echo "<br>";
echo microtime(), "<br>";
echo microtime(), "<br>";
現在、100 万で約 100 ミリ秒かかり (右?)、1000 万で約 480 ミリ秒かかるようです。だから、私の質問はまだ残っています。ループが大きいほど速く動くのはなぜですか? 重要ではありません。これに基づいてウェブサイト全体のデザインを計画しているわけではありませんが、興味があります。