select * from TB_SS_INFORMATION_CN order by PUB_DATE desc ;
该表目前10w数据,再不建立索引的情况下,执行此SQL时间为1min.可查看其执行计划:
先执行 EXPLAIN PLAN FOR select * from TB_SS_INFORMATION_CN order by PUB_DATE desc ;
再执行 select * from table(dbms_xplan.display); 主要看rows。如果都显示100k了那说明就是需要优化。
对于ORDER BY 时间的优化,先建立PUB_DATE字段的索引。
CREATE INDEX TB_PUBDATE_INDEX ON TB_SS_INFORMATION_CN(PUB_DATE);
然后在SQL语句中加入where条件,对于PUB_DATE的范围取值。这样的话可以走到索引。这种时间区间ORACLE也专门提供了。以下是取最近一个月的记录。
select * from TB_SS_INFORMATION_CN where IS_HOTTOPIC = 'Y' and PUB_DATE>=add_months(trunc(SYSDATE),-1) and
PUB_DATE<= SYSDATE order by PUB_DATE desc ;
再次查看执行计划