1

すべての夕方!

Web サイトを最適化していますが、奇妙な動作が発生しています。以前は、使用しているデータに対して計算が行われているためだと思っていましたが、これに疑問を持ち始めています.

次のようなコードを実行していることがわかります。

for ($i=0; $i < 55 ; $i++) { 
  $query = "SELECT id FROM gamedata_concepts WHERE game_id=12277";

  if ($result = $mysqli->query($query){
  }
}

約 3 秒かかりますが、たとえば phpMyAdmin でそのクエリを 1 回呼び出すと、「.0121」秒かかると表示され、それを 55 (上記のループで使用したテスト番号) で乗算すると、appx を取る必要があります。.6655 秒。このバックエンドがどこにあるのか知りたいです。または、より効率的になるようにこれをより適切に設計するにはどうすればよいでしょうか。

ありがとう。

4

2 に答える 2

3

55 個のクエリの代わりに IN を使用するようにクエリをリファクタリングしてみませんか?

SELECT id FROM gamedata_concepts WHERE game_id IN (12277, 12278, 12279, ...)

クエリがループで実行されている場合は、通常、悪い兆候です。

于 2012-07-02T22:42:14.393 に答える
1

トランザクションを使用してこれをより高速に行うことができます

$mysqli->query("START TRANSACTION");
for ($i=0; $i < 55 ; $i++) { 
  $query = "SELECT id FROM gamedata_concepts WHERE game_id=12277";

  if ($result = $mysqli->query($query){
  }
}
$mysqli->query("COMMIT");
于 2015-06-20T21:42:37.450 に答える