php
  • mysql
  • optimization
  • query-optimization
  • performance
  • 2010-12-20 3 views 1 likes 
    1

    私は今日、ページの読み込み時間を増やすことについて友人とチャットしていました。彼は "mysql_num_rows"は古くて時間がかかると言いました。どちらが速いですか?

    以下のコードでmysql_num_rowsを置き換える方が簡単ですか?

    $query  = mysql_query("SELECT COUNT(*) FROM sent_messages WHERE from_sender = '".$_SESSION['id']."'") or die(mysql_error()); 
    $result  = mysql_fetch_array($query); 
    $count  = $result['COUNT(*)']; 
    

    時間の複雑さとアルゴリズムについてあまりよく分かりませんので、アドバイスをいただければ幸いです。

    おかげ

    答えて

    4

    はmysql_num_rows()は古いではありませんが、それは、クライアントとデータベースの間で転送されるように、より多くのデータを必要とするので、それが遅くなります。 mysql_num_rows()は、データを読み込んでカウントする必要がある場合には置き換えられません。あなたが必要とするすべてのレコードの数である場合、私はこの方法をお勧めします。

    $query = mysql_query("SELECT COUNT(*) FROM sent_messages WHERE from_sender = '".$_SESSION['id']."'") or die(mysql_error()); 
    $count = mysql_result($query,0); 
    
    2

    Māris Kiseļovs'answerはここに地面をカバーしています。できるだけDB /クエリを、一般に

    のように多くの仕事を試してみてください:しかし、私は混乱を避けるために、以下を追加します。つまり、PHP(または他の言語)で計算と変換を実行するためだけに多くのデータを取得しないでください。必要なものだけをDBから要求し、データの交換を最小限に抑えます。あなたはCOUNT(*)mysql_result()アプローチのほうが良いでしょう。この特定のケース

    。必要なデータ(レコード数)を要求するだけで、DBレイヤーで計算を実行します。

    しかし、リストを生成するために(レコードを一覧表示することができなかった、あまりにも(すなわち、レコードのセットを超える数反復を提示)あなただけのレコードをフェッチするために、通常のSELECT ... FROM ...を行う必要がありますこの結果セットでmysql_num_rows()を実行します(カウントを取得するため)。この場合、別のSELECT COUNT(*) ...クエリには何の利得もありません。とにかくDBからの結果セット全体が必要なためです。

    +0

    私は好奇心だけど。 mysql_num_rowsよりも提案されたメソッドがどれくらい速いですか? – Lance

    +0

    @Lanceあなたは教えてくれます。テーブルのサイズ、クエリの複雑さ、およびインデックスの関連性/存在に依存します。現実的なデータで試してみてください。 – jensgram

    関連する問題