重庆分公司,新征程启航
为企业提供网站建设、域名注册、服务器等服务
使用倒序索引提升ORDER BY DESC性能
创新互联公司主要从事成都网站设计、网站制作、网页设计、企业做网站、公司建网站等业务。立足成都服务东坡,十余年网站建设经验,价格优惠、服务专业,欢迎来电咨询建站服务:028-86922220
使用倒序索引(INDEX DESC),可以大幅提升带有order by desc子句的SQL语句性能。
举例
1、表名:test_t,有一字段名为object_id
2、总数据量:580000行,segment_size:72MB
3、Where条件(Owner=’SYS’ and Object_id50000)的行数:32472行
4、SQL语句:select * from test_t where owner='SYS' and object_id 50000 order by object_id desc
5、希望借助倒序索引,提升order by object_id desc的性能
希望能帮到你。
1、通过rownum对数据库的记录进行编号
SELECT ROWNUM RN1,A.* FROM A;//从表A中获取记录,并用rownum生成RN1
2、通过RN1的标记进行倒序排序
SELECT B.*,ROWNUM RN2 FROM (SELECT ROWNUM RN1,A.* FROM A) ORDER BY RN1 DESC;
3、通过RN2取小于等于10的数据记录
SELECT * FROM (SELECT B.*,ROWNUM RN2 FROM (SELECT ROWNUM RN1,A.* FROM A) ORDER BY RN1 DESC) WHERE RN2=10;
如果表非常大,需要用rownum查询指定的几条,下面命令可以实现
select * from(
select *
from T_NB_COPY t
order by create_time desc
) b where rownum = 5
去重及时间段获取
select distinct t.device_id from T_RECEIVE_LOG t where t.receive_time = to_date('2018-02-28 00:00:00','yyyy-mm-dd hh24:mi:ss') and t.receive_time = to_date('2018-02-27 00:00:00','yyyy-mm-dd hh24:mi:ss')
oracle中前N条数据可用row_number来实现。
如表中数据:
现在要求按照ID倒序,取出前十位:
oracle中执行方法:
select t.id,t.name from
(select test.*,row_number() over (order by id desc) rn from test) t
where rn=10;
结果:
计算和排序 可以用两个表达式的;计算列作为 select 的子句; (endTime-nowTime) 作为 order by 的子句
如果提示 order by 不是查询的内容,可以用子查询 ,先 select 出来两个列,然后 在按照 (endTime-nowTime) 的倒叙排列