1

今やっている仕事をもっと効率的にする方法はないかと考えています。現在、データベースからステータスを取得するクラスがあります。これは非常に単純で、パフォーマンスにそれほど影響を与えるべきではありません。

public function get ($var1, $var2, $var3)
{
    $feed = array(); //Initialize an empty array
    //Query the database
    $Statement = $this->Database->prepare("SELECT id, name, excerpt, post, timestamp, tags, title FROM posts WHERE col1 = ? AND col2 = ? AND col3 = ? ORDER BY id DESC LIMIT 15");
    $Statement->execute(array($var1, $var2, $var3));

    while($row = $Statement->fetch(PDO::FETCH_ASSOC))
    {
        $posts[] = array( "id" => $row["id"], /*etc...*/ ); 
    }

    return $posts;
} //end get

そして、私のページは、まったく効率的ではないことがわかっている次のようなものを設定しました。

<?php for ($count = 1; $count <= $total; $count++): //Display the calendar      
    echo $count;            
    $feed = $Feed->get($count, $total, $var3);

    foreach ($feed as $post): 
        echo $post["id"];           
    endforeach; 
endfor; ?>

それが理にかなっていることを願っています。そこにはさらに多くのhtmlがスローされ、すべてが含まれています。現在、データベースには 18 行しかなく、ページの読み込みに 10 秒かかります。これは本当に悪いです。サイトのデザイン上、このように設定する必要があります。したがって、foreach ループは for ループ内にある必要があります。これは、全体がカレンダーとして設定されているためです。

私の質問は、すべての行を選択し、それらを for ループの外側に保存してからその配列を操作する方が効率的かどうか、または現在行っている方法で foreach ループ内で各クエリを実行する方がよいかどうかです。 (私はたくさん読んだことがありますが、ほとんどの人がこれは大したことではないと言っていることを知っています)。前者のオプションを使用し、データベースに 100 万行あるとしたら、どのような問題が発生するでしょうか。

それが理にかなっていることを願っています。そうでない場合は、質問を更新します。現在、1 行または 2 行のみにアクセスするために約 30 のクエリが実行されています。しかし、私が思いつくことができる他の唯一のオプションは、テーブル内のすべての行を選択してからその配列を操作することですが、データベースに 100 万行のふりをすると、パフォーマンスにさらに大きな影響を与えるように感じます。

私は正しいですか、そしていくつかの解決策は何ですか? ありがとう

4

1 に答える 1

0

問題を解決したことを指摘したいだけです。なぜ foreach ループがクエリを実行しているのか疑問に思っている人がいれば、投稿者の情報を収集するために毎回 foreach ループ内で Facebook API に接続する行を誤って削除したためです。したがって、誰かがこの質問に出くわしたことがある場合は、facebook->api 呼び出しを頻繁に行うことは悪いことであることを明確にしたいと思います。情報をデータベースに保存し、代わりにクエリを実行します。

于 2013-03-12T21:36:54.503 に答える