limit 那个应该是正常现象。
select count()应该不会出现你所说的情况,建议用explain查一下。

解决方案 »

  1.   

    mysq>explain select count(*) from imageinfo;+----+-------------+-----------+-------+---------------+-------+---------+------
    +---------+-------------+
    | id | select_type | table     | type  | possible_keys | key   | key_len | ref
    | rows    | Extra       |
    +----+-------------+-----------+-------+---------------+-------+---------+------
    +---------+-------------+
    |  1 | SIMPLE      | imageinfo | index | NULL          | width | 5       | NULL
    | 2051604 | Using index |
    +----+-------------+-----------+-------+---------------+-------+---------+------
    +---------+-------------+从分析的结果来看,count(*)已经是采用了索引进行统计.
    然后还发现了,这个工具的rows列输出为2051604,与实际记录数不符,为(2250440)
      

  2.   

    我用的是安装版的mysql5.0.18 for windows,MySQL Server Instance Configuration Wizard时候里有一个选项,决定mysql所使用的内存.选择一个种服务器:Developer Machine,Server Machine和Dedicated MySQL Server Machine三种所使用的内存分别是:最小内存,中等内存和最大的可供使用的内存。
      

  3.   

    我用的是
    Server  Machine
      

  4.   

    我也遇到楼主相似的问题,我是想要处理翻页是问题,需要取得记录总数,但是在做count(*)的时候效率非常不好,CPU100%,不知道有什么解决方式,所以关注第2个问题,这里顶一下
      

  5.   

    select count(*) from userinfo
    改成
    select count(id) from userinfo
      

  6.   

    count(*)很耗资源吗??完了,我全用的count(*)
      

  7.   

    虽然没有得到很好的解决方案,但也没有办法了,经过多次测试,得出以下结论.
    在大数据量的情况下,mysql的count(*)/count(id)是与IO的速度有关的,如果查询出来的记录数是100W条,那个mysql就得循环100W次来计算总数,所以速度就慢了.
    关于limit,也是一样的道理,所以在limit 100W,XX的时候,也是循环100W次来查找记录,所以就有了这样的结果:
    即使查询的结果集为0条记录,但用了limit 100W,10 也是很慢的...
    至于count(*) 与count(id),count(id)确实能提高一点效率,但效果不理想.
    由于以上原因,本人决定不用mysql进行查询,使用lucene进行配合查询...