现有一张100万行记录的表test,
执行以下语句后:explain select * from test limit 80000, 100;返回的rows为1000,000,rows等于总行数,也就是说明进行了全表扫描,这是怎么回事呢?我明明已经加了limit了.

解决方案 »

  1.   

    说明你的 select 有问题,你可以单独执行一下select查询,看行不行
      

  2.   

    去掉explain后执行select只返回100行,加上explain解析出的rows就成了1000000行
      

  3.   

    在 explain 的结果中,rows列显示MySQL相信它必须检验以执行查询的行数(手册语)。
    这个结果与是否有 limit 子句无关。
    当你在一条SELECT语句前放上关键词EXPLAIN,MySQL解释它将如何处理SELECT,提供有关表如何联结和以什么次序联结的信息。
      

  4.   

    要看where 条件是什么才行。
      

  5.   

    是的,要看你后面那个where条件
    或者group by id 因为where是过滤条件
    还有最好做索引
      

  6.   

    limit按理也应该是过滤条件啊,limit没有提速效果的话,还要limit做什么?
      

  7.   

    limit 没有提速效果,
    它只是用来得到表的某些记录。
      

  8.   

    怎么没有效果呢?
    select * from test;
    1000000 in 2.62 secsselect * from test limit 1000;
    1000 rows in 0.01 secs
      

  9.   

    怎么没有提速效果呢?
    select * from test;
    1000000 in 2.62 secsselect * from test limit 1000;
    1000 rows in 0.01 secs
      

  10.   

    嗯,你试着反过来运行一下:select * from test limit 1000;
    select * from test;
      

  11.   

    晕,limit只是限制输出,和查询有什么关系???