oracle千万级数据 分页查询 如何优化

时间:2022-10-12 21:12:15
最近在做一个项目,日志数据库有将近5百万,需求为带条件,分页查询
传统的分页SQL语句,查询将近10s左右,如何优化

11 个解决方案

#1


可以根据常见的条件,做分区表;

#2


已经根据入库时间创建了分区,但由于条件太多,所以,创建分区之后,效果不是很大

#3


方便贴出你的分区情况和查询语句吗?

#4


select * from(
select a.*,rownum r from(
select name,type,object,time,desc,result,ip from log)
<where>
    查询语句
<where>
order by time desc) a where rownum &lt;#{end} 
) where r>#{begin}

分区是按time  每月分区

#5


你的查询条件,是什么呢 ?

#6


所有的字段   name,type,object,time,desc,result,ip 模糊查询

#7


引用 6 楼 youzhi1225 的回复:
所有的字段   name,type,object,time,desc,result,ip 模糊查询


有时间区间的条件吗?如果没有的话,这个估计,就不好优化了;建立了索引也用不动的;

#8


没有,时间是不定的,可以输入任何时间段

#9


给他们一个默认时间,让他们强制用时间查,这样走分区表

#10


这个是要匹配业务的。
依据时间做分区,查询条件里默认匹配时间区间。
预判查询结果量,太大时,前台或者提醒,或者禁止。

#11


时间作为必选条件(缺省值用最常用的,比如最近5分钟、1小时等等),同时考虑结合分区(按月)情况限制可查询时间的长度(比如1个月、2个月或者1年等),用户如果一定要放到很宽,那也只能慢了。
索引时间在第一字段,其他的模糊查询索引很难用的起来

#1


可以根据常见的条件,做分区表;

#2


已经根据入库时间创建了分区,但由于条件太多,所以,创建分区之后,效果不是很大

#3


方便贴出你的分区情况和查询语句吗?

#4


select * from(
select a.*,rownum r from(
select name,type,object,time,desc,result,ip from log)
<where>
    查询语句
<where>
order by time desc) a where rownum &lt;#{end} 
) where r>#{begin}

分区是按time  每月分区

#5


你的查询条件,是什么呢 ?

#6


所有的字段   name,type,object,time,desc,result,ip 模糊查询

#7


引用 6 楼 youzhi1225 的回复:
所有的字段   name,type,object,time,desc,result,ip 模糊查询


有时间区间的条件吗?如果没有的话,这个估计,就不好优化了;建立了索引也用不动的;

#8


没有,时间是不定的,可以输入任何时间段

#9


给他们一个默认时间,让他们强制用时间查,这样走分区表

#10


这个是要匹配业务的。
依据时间做分区,查询条件里默认匹配时间区间。
预判查询结果量,太大时,前台或者提醒,或者禁止。

#11


时间作为必选条件(缺省值用最常用的,比如最近5分钟、1小时等等),同时考虑结合分区(按月)情况限制可查询时间的长度(比如1个月、2个月或者1年等),用户如果一定要放到很宽,那也只能慢了。
索引时间在第一字段,其他的模糊查询索引很难用的起来