oracle日期查询的优化
悬赏:50 发布时间:2008-07-25 提问人:newold (初级程序员)
OLTP的应用,有张两千万记录的表,一个日期类型字段,有索引,现在有个查询第一次执行要6秒左右,分析器显示大部分时间花在这个日期索引上了。现在知道绝大部分业务查询都是基于今天,明天,后天的日期,想就这部分查询提高速度。希望优化到1秒左右,有没有办法,不想做表分区。
问题补充:
使用物化查询对交易性能影响吗?
问题补充:
物化视图才能优化查询,该怎么使用呢?
问题补充:
索引肯定是使用了,由于表记录太多,速度还是有点慢,还有其他的方法吗
问题补充:
基本的错误我不会有啦,肯定的用到索引,我在优化器优化了好久的
该问题已经关闭: 可能要手工做分区工作
问题补充:
使用物化查询对交易性能影响吗?
问题补充:
物化视图才能优化查询,该怎么使用呢?
问题补充:
索引肯定是使用了,由于表记录太多,速度还是有点慢,还有其他的方法吗
问题补充:
基本的错误我不会有啦,肯定的用到索引,我在优化器优化了好久的
该问题已经关闭: 可能要手工做分区工作
回答
把SQL贴出来看看
cats_tiger (高级程序员) 2008-07-25
建立视图,只放今天,明天,后天日期的数据,然后对视图优化。
gaoran2008 (初级程序员) 2008-07-25
提醒一句,
如果在查询条件中对日期列进行了
to_char, trunc之类的函数运算的话,
建立在这个日期列上的索引是不会被使用到的
如果在查询条件中对日期列进行了
to_char, trunc之类的函数运算的话,
建立在这个日期列上的索引是不会被使用到的
armorking (初级程序员) 2008-07-25
尽量类似这样的sql吧(假设条件是strDate):
select * from fightInfo t where t.flt_date > to_date(strDate,'yyyy-MM-dd')
select * from fightInfo t where t.flt_date > to_date(strDate,'yyyy-MM-dd')
johnnyhg (初级程序员) 2008-07-25
提醒“newold”,oracle的日期字段在使用PreparedStatement.setDate()的时候索引无效,用johnnyhy提的方法就ok
nihongye (中级程序员) 2008-07-26
首先对该字段不能应用函数,例如 trunc 之类的。
然后,考虑到主要是基于今天,明天,后天的日期,可以使用降序hint(默认是升序)。例如,/*+ INDEX_DESC(YOUR_INDEX_NAME) */
然后,考虑到主要是基于今天,明天,后天的日期,可以使用降序hint(默认是升序)。例如,/*+ INDEX_DESC(YOUR_INDEX_NAME) */
uprush (初级程序员) 2008-07-28
将日期字段换成varchar2
zhajie (初级程序员) 2008-07-29




