簡體   English   中英

通過使用限制或使用程序來提取特殊記錄的SQL選擇

[英]SQL select by using limit or using program to fetch special records

我正在使用php從數據庫獲取特殊記錄。
哪一個更好?
1。

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

或2。

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

在這種情況下,我應該使用哪一個?
哪一個使用的DB的資源較少?

哪一個更好?

太含糊:什么是“更好”?

哪一個使用的DB的資源較少?

第一種方法會使您的生活變得更好。 選擇所需的數據少而不需要多的數據非常有效。 選擇整個表將迫使您的腳本使用更多的內存,因為所有這些數據都需要保持活動狀態

您將獲得的最佳答案是: 測試! 您可以通過多種方式多次運行查詢,並親自查看。 只需使用SELECT SQL_NO_CACHE...而不是通用的SELECT...即可強制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');

然后,您可以比較兩次。 通常(並非總是),花費大量時間的過程使用較少的資源

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM