9

私はこのアーティスを見るだけです

この場合の最高のパフォーマンスは何であるかを知る必要があります

クエリのステートメントの場合

SELECT *,if( status = 1 , "active" ,"unactive") as status_val FROM comments

VS

<?php
    $x = mysql_query("SELECT * FROM comments");

     while( $res = mysql_fetch_assoc( $x ) ){
       if( $x['status'] == 1 ){
             $status_val = 'active';
        }else{
             $status_val = 'unactive';
        }
     }
  ?>

文字列から10を切り取ります

SELECT * , SUBSTR(comment, 0, 10) as min_comment FROM comments

VS

<?php
    $x = mysql_query("SELECT * FROM comments");

     while( $res = mysql_fetch_assoc( $x ) ){
       $min_comment = substr( $x['comment'],0,10 ) ;
     }
  ?>

など????? MYSQL関数またはPHP関数を使用する場合はどうなりますか?

4

5 に答える 5

4

場合によります。 ネットワークの観点からは、最初の VS では PHP が勝利し、2 番目の VS では MYSQL が勝利します。これは、ソケット経由で送信するデータが少ないためです。したがって、スクリプトは高速になります。

于 2012-11-01T11:57:01.160 に答える
2

これがあなたの質問の素晴らしい説明です: MySQL vs PHPで計算を行う

2 番目の例の場合、速度の問題が重大になる可能性があります。まず第一に、あなたのコメントがどれだけ大きいか分からないので、

$x = mysql_query("SELECT * FROM comments");

 while( $res = mysql_fetch_assoc( $x ) ){
   $min_comment = substr( $x['comment'],0,10 ) ;
 }

サーバーにすべてを返すように依頼すると (ここでは、コメント全体の長さを意味します)、これは重要な場合があります。テーブル内の行数を掛けると、非常に大きなサイズのデータ​​になる可能性があり、php と sql の間で転送する必要があります。2 番目のケースでは、SELECT * , SUBSTR(comment, 0, 10) as min_comment FROM comments これはサーバー上で既に行われており、追加のメモリは必要ありません。

最初の例の場合、後で追加のループを実行する必要があるため、SQL 側で実行する方がよいと思います。これとは別に、あなたのコードを読む人は、なぜそのコードが必要なのか混乱するかもしれません.

于 2012-11-01T12:08:28.897 に答える
1

その場合、MySQL 関数を使用すると、PHP でループすることがなくなり、多くのコードを節約できます。

それ以外の場合、代替手段はありません。たとえば、WHERE部品で使用する場合です。

パフォーマンスに関しては、ほとんどの場合、違いはわずかです。最も単純なソリューションを使用してください。

于 2012-11-01T11:57:58.033 に答える
0

唯一の答え:測定してください!2 つの有効なソリューションがあり、最適な実行時間を達成したいと考えています。

于 2012-11-01T11:57:39.990 に答える
0

それはすべて、どちらかの端と現在の負荷のシステムに依存していると思います。通常、DB サーバーはデスクトップ マシンよりも頑丈であり、分割して PHP を部分的に使用するよりも、DB 側ですべてを実行する方が高速です。

于 2012-11-01T11:57:59.563 に答える