Oracle的分页查询在表中数据量极大时(上亿条、有索引),在第一次查询会出结果(3、5秒),而相同条件在第一次查询出结果立即再次进行查询时,会出现长时间等待也没有结果的情况(好像锁住了)。
请问如何解决,谢谢!
语句示例如下(数据行数cnt大约从几千、几万、十几万不等,都是同样的问题):
SELECt * FROM ( SELECt A.*, ROWNUM RN FROM (select count(*) over() CNT,
ta.ca,ta.cb,ta.cc,... from ta where fname like 'test%' ORDER BY ta.ca
) A WHERe ROWNUM <= 15 ) WHERe RN >= 1
Oracle的极大数据量的分页查询问题
答案:6 悬赏:20 手机版
解决时间 2021-04-05 04:28
- 提问者网友:温柔港
- 2021-04-04 16:21
最佳答案
- 五星知识达人网友:春色三分
- 2021-04-04 17:26
1.把星都换成需要的字段名试一下。
2.索引顺序排列正确(这个你查一下,索引不是建 了就可以。查询时有顺序的,四年前的项目,改变顺序后,时间由35s 提升到6-8s,具体的记不清了,只记得有这么回事。)
回去以后试一下你的SQL,只有数据多才出现这个问题吗?字段长度大约都多少?
2.索引顺序排列正确(这个你查一下,索引不是建 了就可以。查询时有顺序的,四年前的项目,改变顺序后,时间由35s 提升到6-8s,具体的记不清了,只记得有这么回事。)
回去以后试一下你的SQL,只有数据多才出现这个问题吗?字段长度大约都多少?
全部回答
- 1楼网友:有你哪都是故乡
- 2021-04-04 22:29
相同条件在第一次查询出结果立即再次进行查询时
你第二次查询你查出来的结果集是去全表遍历查的 结果集是没有就是一推数据 上面没有索引没有任何东西,建议能先处理逻辑关系减少数据量 orderby 这些能不用就不用 like也会让index失效 用between可以代替
- 2楼网友:一秋
- 2021-04-04 21:27
第一次能快速的出来结果,就说明了语句本身没有太大的问题。现在不明白你的第二次查询是一直都不出来结果,还是说能出来结果,但是结果出来的非常慢。
- 3楼网友:过活
- 2021-04-04 19:53
没法优化。查询条件中用了like子句,索引会不起作用,造成遍历整张表。
如果没有like及order by子句的话,会快很多
- 4楼网友:低血压的长颈鹿
- 2021-04-04 19:29
你这样做分页是全部查询后分页吗?为何不做成分页后查询?因为你只写了语句示例具体情况不是很了解。我们曾经做过一次查询后分页会使得页面刷新很慢,但调整后就相对快很多了。
- 5楼网友:未来江山和你
- 2021-04-04 18:27
打数据量的话,其实是查询的效率问题了。一般的索引、字段优化都没想过的话,考虑拆表、分区,如果是汇总型数据的话,那么可以对查询的数据进行前期汇总若干次之后在进行查询。
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯