2

我有一种情况,我必须从表中选择一些行....

表有点如下......

        id           Name          Age

        0011         name1          45
        0012         name2          67
        .
        . 
        .
        .
        0020         name10         100
        .
        .
        .
        .


         // id is a primary key varchar(4).......
         // name is varchar.....
         // age is int.......

现在我需要得到一个范围内的值,比如0011 - 0020or 0020 - 0030.....我可以生成这个特定范围的开始和结束,我希望你不要考虑......

但我的疑问是

          Should I execute 10 SELECT queries based on the index values ?

例如:-

           for(i=0;i<10;i++)
           {
                    //SQL Query to SELECT row WHERE id = '0011' LIMIT 0,1 
                    // next time it id to select would be '0012'
            }

或者

           Should I include a single Query to SELECT ROWS using AND, OR , BETWEEN..etc..with limit 10..???

哪个更快……???

我在第一种情况下感到困惑,一次只选择一行,并且在每个查询中没有太多操作(其中10 次请求是恶棍),而在第二种情况下,只使用一个查询,但我相信使用比较运算符在 varchar 主键上提供了开销............

4

3 回答 3

1

真正的成本是解析和执行多个查询,而不是获得比您现在需要或现在可能需要的更多的数据。

鉴于您似乎正在分页,例如一次获得十个,您应该立即选择一个完整的页面,中间有一个。

>= Start and <= End有时查询优化器可能会比做得更好between start and end,但除此之外我看不到问题,除非您的表非常宽(一行中有很多数据)

于 2012-06-24T11:42:24.277 回答
0

可以做sql查询返回一个表的结果 SELECT COUNT(*) FROM table,例如: 1000 并获取页数 $pages=ceil(1000/10);

for ($i=0;$i<=$pages:$i++) {
$start=10*$i;
$sql="SELECT MIN(id), MAX(id) FROM TABLE WHERE LIMIT ".$start.",10";
}
于 2012-06-25T22:28:53.733 回答
0

单个查询是从数据库比较中获取数据的更快方法,使用 for 循环与其他查询比较它们需要很长时间,因为每个查询都有自己的单独执行时间,现在取决于您选择的方式

于 2012-06-24T11:50:48.190 回答