MySql查询速度混乱BETWEEN或许多索引查询

时间:2012-06-24 11:32:26

标签: mysql indexing comparison

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

该表有点如下.......

        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 - 00200020 - 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..???

哪一个更快...... ???

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

3 个答案:

答案 0 :(得分:1)

实际成本是分析和执行多个查询,而不是获取比现在需要的更多数据,或者现在可能需要。

鉴于您似乎是分页,就像一次获得十个一样,您应该使用两者之间立即填充页面。

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

答案 1 :(得分:0)

单个查询是更快的方式从数据库比较获取数据与其他查询与for循环他们花了这么多时间因为每个查询有自己的个人执行时间现在它取决于您选择的方式

答案 2 :(得分:0)

您可以执行sql查询以返回表SELECT COUNT(*)FROM表的结果,例如: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";
}