2016-07-22 5 views
0

私はデータベースから特別なレコードを取得するためにPHPを使用しています。
どれが良いですか?
1.
SQLを使用して制限を使用するか、プログラムを使用して特別なレコードを取得する

Select * From [table] Limit 50000, 10; 
while($row = $stmt->fetch()){ 
    //save in array, total 10 times 
} 

またはこの場合に

Select * From [table]; 
$start = 50000; 
$length = 10; 
while($row = $stmt->fetch()){ 
    if($i < $start+$length && $j >=$start){ 
      //save in array, total 50010 times 
    } 
} 

、どちら私が使用する必要がありますか?
リソースの少ないDBを使用しているのはどれですか?

+0

最初の方が良いです。 1)。 2)データの総負荷数に応じて。 –

+0

#1が良いです。 MySQLは集約も優れています。計算をするPHPを避ける – SIDU

+0

これらの2つでは、最初の方が優れていますが、実際にはどちらも良い設計ではありません。ジャンプ50000は多くです。 –

答えて

0

どれが良いですか?

「あまりにも良い」とは何ですか?

リソースの少ないDBを使用しているのはどれですか?

あなたは最初のアプローチではるかに良いです。必要なだけ少ないデータを選択することは効率的です。テーブル全体を選択すると、そのデータをすべてライブに保存する必要があるため、スクリプトのメモリ使用量が増えます。

答えはです!複数の方法で複数回クエリを実行して、自分で参照することができます。汎用SELECT...の代わりにSELECT SQL_NO_CACHE...を使用して、DBが最初から作業を再開するようにしてください。クエリを実行して結果を処理するのにかかる時間を測定する

function wayOne(){ 
    // execute your 1st query and loop through results 
} 
function wayTwo(){ 
    // execute 2nd query and loop through results 
} 

//Measures # of milliseconds it takes to execute another function 
function timeThis(callable $callback){ 
    $start_time = microtime(); 
    call_user_func($callback); 

    $microsecs = microtime()-$start_time; //duration in microseconds  
    return round($microsecs*1000);//duration in milliseconds 
} 

$wayOneTime = timeThis('wayOne'); 
$wayTwoTime = timeThis('wayTwo'); 

次に、2回比較します。一般的に(必ずしもそうではありませんが)、処理時間が大幅に短縮されるプロセスは、リソースをより少なくします。

関連する問題