请问大数据表使用order by如何优化性能
例如有一张表month_stat共2500万数据,要按流量字段倒序分页查询,查询语句里还有几个查询条件,前几页查询速度也在一秒内,但是分页越大查询越慢。stat_date字段是日期,实际上每个月都会插入200万相同号码的数据进表里,stat_date用来区分日期。
下面是sql语句:
--------------------------------------------------------------------
-- Create table
create table MONTH_STAT
(
stat_date VARCHAR2(32) not null, --日期,如2013-05
msisdn VARCHAR2(32) not null, --号码
ec_id NUMBER(10), -- 企业id
ec_name VARCHAR2(255), -- 企业名称
month_flow NUMBER(15,2) not null-- 流量
);
create index IDX_MONTH_STAT_DATE on MONTH_STAT (STAT_DATE);
create index IDX_MONTH_STAT_EC_ID on MONTH_STAT (EC_ID);
create index IDX_MONTH_STAT_MSISDN on MONTH_STAT (MSISDN);
create index IDX_MONTH_STAT_MFLOW on MONTH_STAT (MONTH_FLOW);
-- Select
select *
from (select a.*, rownum rn
from (select s.month_flow,
s.msisdn,
s.stat_date,
s.ec_id
from MONTH_STAT s
where 1 = 1
--and s.msisdn like '%137%'
and s.stat_date = '2013-03'
and s.ec_id in (1731, 1731)
order by s.month_flow desc) a
where rownum <= 10000 * 10)
where rn > (10000 - 1) * 10
-----------------------------------------------------------------------
我还试过倒序索引来实现,但是效果不理想,如果加上其他where条件查出来的数据依然不会倒序排列。
-----------------------------------------------------------------------
-- Create index
create index IDX_MONTH_STAT_ROWS on MONTH_STAT (month_flow DESC, stat_date, msisdn, ec_id);
-- Select
select *
from (select a.*, rownum rn
from (select s.month_flow,
s.msisdn,
s.stat_date,
s.ec_id
from MONTH_STAT s
where 1 = 1
--and s.msisdn like '%137%'
and s.stat_date = '2013-03'
and s.ec_id in (1731, 1731)
) a
where rownum <= 10000 * 10)
where rn > (10000 - 1) * 10
-----------------------------------------------------------------------
请问有什么好方法优化吗?
页:
[1]