求记录数没必要用order by t.ss_fid, t.ss_hs_fid, t.login_time既然知道记录数你就知道你要检索的是前半部分还是后半部分, 前半部分: where rownum <= 1000720) where rownum_ > 1000701 后半部分: where rownum_ > 1000701) where rownum <= 1000720具体好不好用俺也不知道,你可以试试
按照你的提示,尝试不用order by t.ss_fid, t.ss_hs_fid, t.login_time:第一次查询时,无论是select *查记录,还是select count(*)统计,依然是挺耗时,分别是22秒和5秒,但是第二次查询相同分页数据时,基本都能控制在0.5到0.7秒以内,这个是不是得益于缓存?如果是,那如何用缓存来解决或是缓解因为增加order by而带来的负面性能影响?
t.state=1 and t.h_fid='5a4ca4a22a74f721012a7dcf16890013' 这个查询条件选择性如何?如果把大部分的数据都查出来,那就用不了索引。
这个是如何看的?
不过可以看得出644799是符合本次查询条件下的记录总数,数据库中一共有差不多130万条记录。
如果你这个业务比较关键且有足够的SGA,可考虑把表CACHE到BUFFER_CACHE中,提高查询效率。
http://blog.csdn.net/yangzhawen/article/details/7661776
按照文章所述,已调整为708M,问题还是没得到解决。
前半部分: where rownum <= 1000720) where rownum_ > 1000701
后半部分: where rownum_ > 1000701) where rownum <= 1000720具体好不好用俺也不知道,你可以试试
按照你的提示,尝试不用order by t.ss_fid, t.ss_hs_fid, t.login_time:第一次查询时,无论是select *查记录,还是select count(*)统计,依然是挺耗时,分别是22秒和5秒,但是第二次查询相同分页数据时,基本都能控制在0.5到0.7秒以内,这个是不是得益于缓存?如果是,那如何用缓存来解决或是缓解因为增加order by而带来的负面性能影响?