mysql 千万级的分页查询---求好的思路

JavaAlpha 2013-08-08 04:48:41
最近做一个项目,涉及到千万级的数据库处理。
做分页的时候一次统计千万的数据量会等好久。
大家有什么好的方法。
我现在用的是count(id)统计的。
...全文
256 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
mayuanfei 2013-08-09
  • 打赏
  • 举报
回复
我感觉可以把常用的数据放入一个视图或者一个表中.比如你的千万级别的数据是按照年分的.那么把半年的内的常用数据放在这个review或者table中.那么数据可能就是百万级甚至十万级别了.那就快多了. 另外也可以用Redis内存数据库来同步你这个千万级的表.如果用Redis的话,基本就是1秒内了.
MiceRice 2013-08-09
  • 打赏
  • 举报
回复
引用 7 楼 JavaAlpha 的回复:
另外一个朋友说,使用RANGE分区以后在加list分区 。 因为我的查询里面会多设计到时间段查询和分部门查询。 索引暂时没建。
建分区的效果会更好,但是会增加很多管理复杂度,索引也会复杂化。 所以如果能通过其它方式优化,就先不动用分区;就算真的建立分区,也暂时别建立两级分区吧。 索引还是要建的,没有索引,每次都是 Full Scan,属于耍数据库的做法。。。
小丑哥_V5 2013-08-09
  • 打赏
  • 举报
回复
如果你的这堆数据经常分页统计的话,再加上条件允许,我觉得还是缓存到硬盘上是个不错的选择,响应时间无压力
小丑哥_V5 2013-08-09
  • 打赏
  • 举报
回复
引用 7 楼 JavaAlpha 的回复:
[quote=引用 6 楼 ldh911 的回复:] 1、最好先检查下你用于计算总条目数的SQL语句的执行计划。 2、最好不要用 count(id),直接用 count(1)。 3、索引是否创建正确?也需要根据1的检查结果来定。 4、另外自行记录总条目数。
感谢您的回复,我刚才安装一个朋友说的重启mysql,对比了下count(id)和count(1),确实1比id更快。 另外一个朋友说,使用RANGE分区以后在加list分区 。 因为我的查询里面会多设计到时间段查询和分部门查询。 索引暂时没建。[/quote]
zyrobert 2013-08-09
  • 打赏
  • 举报
回复
不懂 来围观
oh_Maxy 2013-08-08
  • 打赏
  • 举报
回复
数据库表,是不是有个rowid还是rownum的隐藏列?这个是自增长的自然数,能否考虑用它来做分页?
JavaAlpha 2013-08-08
  • 打赏
  • 举报
回复
引用 6 楼 ldh911 的回复:
1、最好先检查下你用于计算总条目数的SQL语句的执行计划。 2、最好不要用 count(id),直接用 count(1)。 3、索引是否创建正确?也需要根据1的检查结果来定。 4、另外自行记录总条目数。
感谢您的回复,我刚才安装一个朋友说的重启mysql,对比了下count(id)和count(1),确实1比id更快。 另外一个朋友说,使用RANGE分区以后在加list分区 。 因为我的查询里面会多设计到时间段查询和分部门查询。 索引暂时没建。
MiceRice 2013-08-08
  • 打赏
  • 举报
回复
1、最好先检查下你用于计算总条目数的SQL语句的执行计划。 2、最好不要用 count(id),直接用 count(1)。 3、索引是否创建正确?也需要根据1的检查结果来定。 4、另外自行记录总条目数。
JavaAlpha 2013-08-08
  • 打赏
  • 举报
回复
引用 4 楼 viszl 的回复:
count做分区没有意义,我相信用户不会对多有的数据都感兴趣的,可以对这些数据加一些过滤,比如在界面上加一个时间过滤条件
感谢你的回复,查询生成报表的时候是根据时间段选择的。
loveofmylife 2013-08-08
  • 打赏
  • 举报
回复
count做分区没有意义,我相信用户不会对多有的数据都感兴趣的,可以对这些数据加一些过滤,比如在界面上加一个时间过滤条件
JavaAlpha 2013-08-08
  • 打赏
  • 举报
回复
引用 2 楼 shadowsick 的回复:
表分区处理 横向纵向切分 主键加索引 select count(主键) from
之前是做过分区的,而且主键也加了索引
小丑哥_V5 2013-08-08
  • 打赏
  • 举报
回复
表分区处理 横向纵向切分 主键加索引 select count(主键) from
失忆的鱼 2013-08-08
  • 打赏
  • 举报
回复
我也想知道,帮你顶一下~~~

67,512

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧