SQL通过使用限制或使用程序来选择获取特殊记录

时间:2016-07-22 04:03:51

标签: php mysql database fetch

我使用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?

1 个答案:

答案 0 :(得分:0)

  

哪一个更好?

太模糊了:什么是&#34;更好&#34;?

  

哪一个使用资源较少的数据库?

第一种方法让你感觉好多了。选择尽可能少的数据是有效的,而不是更多。选择整个表将强制您的脚本使用更多内存,因为所有数据都需要保存在实时

您将获得的最佳答案是:测试!您可以通过多种方式多次运行查询,并亲眼看看。只需使用SELECT SQL_NO_CACHE...而不是通用SELECT...来强制数据库从头开始重新开始工作。衡量运行查询和处理结果所需的时间

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');

然后你可以比较两次。通常(并非总是)一个花费更少时间的过程使用更少的资源