首页新闻找找看学习计划

关于分页的查询sql问题

0
悬赏园豆:20 [已解决问题] 解决于 2013-12-25 16:02

因为数据库中的数据较多,上千万行,每页显示50条数据,这个查询起来倒是还不是很慢,关键是界面上要显示总页数,那么第一次查询数据库的时候就要查询一遍满足条件的记录的条数(select count(*) from t where ......),这个查询非常非常慢,大家又什么好的解决方法吗?谢谢。

会长的主页 会长 | 大侠五级 | 园豆:6040
提问于:2013-12-25 14:33
< >
分享
最佳答案
0

where条件上都加上索引即可。

收获园豆:5
````` | 专家六级 |园豆:14268 | 2013-12-25 14:35

有索引,也不快。已经加上索引了,加在一个日期字段上,按日期查询,查询2年的数据

select count(*) from t where datetime >= to_date('2011-11-25','yyyy-mm-dd') and datetime < to_date('2013-12-25','yyyy-mm-dd')

需要1分钟多,一共有2千多万行

查询一个月的数据要3秒多。

查询四个月的数据要12秒多

 

不过很少有人查这么多。。。。

 

会长 | 园豆:6040 (大侠五级) | 2013-12-25 14:43

@会长: 一般count就会很慢。1+1的累加把。这个@包拯 看看有撒好的解决方案吧,俺对数据库十分不擅长。

````` | 园豆:14268 (专家六级) | 2013-12-25 14:49

@imfunny: 好的,谢谢

会长 | 园豆:6040 (大侠五级) | 2013-12-25 14:52

@会长: 我印象中有了to_date这类东西在这, 那么索引就没用了. 

 

话说这个还有个变态的解法, 就是分别建年月日三列, 冗余存储.

然后在这三列上加索引

undefined | 园豆:698 (小虾三级) | 2013-12-25 18:27
其他回答(3)
0

这个是没办法的,建议做个异步来加载这个总数

收获园豆:5
jerry128 | 园豆:31 (初学一级) | 2013-12-25 15:25
0

如果你建立的是非聚集索引,那where后条件的顺序需要与 索引列的顺序是一至的如果条件用And 连接,另外尽量把限制较大的大件靠近where 。

收获园豆:5
Zery | 园豆:6069 (大侠五级) | 2013-12-25 15:41
0

异步加载总数可行,索引合理的话,这个问也没啥.如果数据表中的数据太多的话,就提供表分区,年分表,月分表等等方式处理.

收获园豆:5
jerry-Tom | 园豆:4077 (老鸟四级) | 2013-12-25 15:45
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册