最近做一个项目,涉及到千万级的数据库处理。
做分页的时候一次统计千万的数据量会等好久。
大家有什么好的方法。
我现在用的是count(id)统计的。MySQL千万级海量查询

解决方案 »

  1.   

    表分区处理
    横向纵向切分
    主键加索引
    select count(主键) from 
      

  2.   

    count做分区没有意义,我相信用户不会对多有的数据都感兴趣的,可以对这些数据加一些过滤,比如在界面上加一个时间过滤条件
      

  3.   

    1、最好先检查下你用于计算总条目数的SQL语句的执行计划。
    2、最好不要用 count(id),直接用 count(1)。
    3、索引是否创建正确?也需要根据1的检查结果来定。
    4、另外自行记录总条目数。
      

  4.   

    感谢您的回复,我刚才安装一个朋友说的重启mysql,对比了下count(id)和count(1),确实1比id更快。
    另外一个朋友说,使用RANGE分区以后在加list分区 。
    因为我的查询里面会多设计到时间段查询和分部门查询。
    索引暂时没建。
      

  5.   

    数据库表,是不是有个rowid还是rownum的隐藏列?这个是自增长的自然数,能否考虑用它来做分页?
      

  6.   

    感谢您的回复,我刚才安装一个朋友说的重启mysql,对比了下count(id)和count(1),确实1比id更快。
    另外一个朋友说,使用RANGE分区以后在加list分区 。
    因为我的查询里面会多设计到时间段查询和分部门查询。
    索引暂时没建。
      

  7.   


    建分区的效果会更好,但是会增加很多管理复杂度,索引也会复杂化。所以如果能通过其它方式优化,就先不动用分区;就算真的建立分区,也暂时别建立两级分区吧。索引还是要建的,没有索引,每次都是 Full Scan,属于耍数据库的做法
      

  8.   

    我感觉可以把常用的数据放入一个视图或者一个表中.比如你的千万级别的数据是按照年分的.那么把半年的内的常用数据放在这个review或者table中.那么数据可能就是百万级甚至十万级别了.那就快多了.另外也可以用Redis内存数据库来同步你这个千万级的表.如果用Redis的话,基本就是1秒内了.