查询优化:哪种SELECT语法更快?

时间:2010-08-05 08:39:17

标签: php sql mysql optimization

在数据库中获取5,000个记录提取ID,您认为哪个查询更快?

  1. 使用php循环访问5000个ID,并为每个ID执行SELECT查询,

    foreach($ids as $id){
      // do the query 
      $r = mysql_query("SELECT * FROM TABLE WHERE ID = {$id}");
    }
    
  2. 或收集数组中的所有ID,并使用SELECT * FROM TABLE WHERE ID IN(1到5000)

    //assuming $ids = array(1,2 ---- up to 5000);
    $r = mysql_query("SELECT * FROM TABLE WHERE ID IN (".join(",",$ids).")");
    

7 个答案:

答案 0 :(得分:4)

选项2肯定会更快。 5000个单独的数据库查询将产生巨大的网络连接开销。

答案 1 :(得分:4)

毫无疑问,一次加载它们会更快。运行5,000个查询会慢得多,因为每个查询都会带来一定的开销。

另外,为了加快速度,请不要使用*运算符!选择您要使用的字段,如果您只需要ID列,请指定此字段!如果您想要所有列,请全部指定,因为您可能稍后添加字段,而无需检索此新字段。

答案 2 :(得分:2)

最快的方法是不要求5000行 你几乎不需要100个就可以在一个页面上显示它们。 5000是过度杀伤

答案 3 :(得分:0)

当然可以衡量一下,但我当然建议让数据库完成这项工作。 一切都取决于,我希望你不是为每个电话创建一个连接。

答案 4 :(得分:0)

如果使用绑定变量使用查询语句,循环会更快。在循环中声明语句;然后在循环内部为每个id绑定变量。

不要低估进入SQL解析的时间;特别是在这些长篇大论的事情上。

答案 5 :(得分:0)

选项2更快。使用选项1,您可以在每次迭代时对服务器进行完整的舍入。

我要指出,在这种情况下,您可以考虑使用分页来显示数据。

提示:测量,测量,测量。使用价值10分钟的代码,您将立即获得答案。

答案 6 :(得分:0)

对于许多查询来说哪个更快? 尝试测量它,例如:

<?php
    $start = getmicrotime();
    for ($i=0;$i<100000;$i++)
    {
            foreach($ids as $id){
              // do the query 
              $r = mysql_query("SELECT * FROM TABLE WHERE ID = {$id}");
            }

    }
    $end = getmicrotime();
    echo 'Time (1): '.($end- $start).' sec';



    $start = getmicrotime();
    for ($i=0;$i<100000;$i++)
    {
            //assuming $ids = array(1,2 ---- up to 5000);
            $r = mysql_query("SELECT * FROM TABLE WHERE ID IN (".join(",",$ids).")");
    }
    $end = getmicrotime();
    echo 'Time (2): '.($end- $start).' sec';
?>