多个计算是没有办法,我可以通过避免像 避免了相同的值
regexp_replace(my_source_file, 'TABLE_NAME_|_AM|_PM|TO|.csv|\d+:\d{2}:\d{2}', '')一些重复值的倍数计算提高此查询性能的方法是什么? 和
to_date(regexp_replace(regexp_replace(my_source_file, 'TABLE_NAME_|_AM|_PM|_TO_|\.csv|\d+:\d{2}:\d{2}', ''), '^(\d{4}-\d+-\d+)_.+$', '\1'), 'YYYY-MM-DD')
这列被计算3和2的时间,我拼命地跑一些测试,仅通过去除DATE_START列中的查询性能由约20秒改善。我想如果oracle提供了一个更好的方法来保留这些值,并避免多次计算会很好。我也想避免
实际查询:
select * from ( select row_number() over (partition by DCRAINTERNALNUMBER, ISSUE_DATE, PERMIT_ID order by to_date(regexp_replace(regexp_replace(my_source_file, 'TABLE_NAME_|_AM|_PM|_TO_|\.csv|\d+:\d{2}:\d{2}', ''), '^.+_(\d{4}-\d+-\d+)_$', '\1'), 'YYYY-MM-DD') desc) as row_order, to_date(regexp_replace(regexp_replace(my_source_file, 'TABLE_NAME_|_AM|_PM|_TO_|\.csv|\d+:\d{2}:\d{2}', ''), '^(\d{4}-\d+-\d+)_.+$', '\1'), 'YYYY-MM-DD') as date_start, to_date(regexp_replace(regexp_replace(my_source_file, 'TABLE_NAME_|_AM|_PM|_TO_|\.csv|\d+:\d{2}:\d{2}', ''), '^.+_(\d{4}-\d+-\d+)_$', '\1'), 'YYYY-MM-DD') as date_end, temp2.* from schema.TABLE_NAME temp2 ) t
我也试着模仿这样的事情,以避免重复计算,但是由于所有的嵌套的SELECT语句没有提高什么...它使查询与慢约25秒:
select * from ( select row_number() over (partition by DCRAINTERNALNUMBER, ISSUE_DATE, PERMIT_ID order by date_end desc) as row_order, temp1.* from ( select to_date(regexp_replace(date_raw, '^(\d{4}-\d+-\d+)_.+$', '\1'), 'YYYY-MM-DD') as date_start, to_date(regexp_replace(date_raw, '^.+_(\d{4}-\d+-\d+)_$', '\1'), 'YYYY-MM-DD') as date_end, temp2.* from ( select regexp_replace(my_source_file, 'TABLE_NAME_|_AM|_PM|_TO_|\.csv|\d+:\d{2}:\d{2}', '') as date_raw, temp3.* from schema.TABLE_NAME temp3 ) temp2 ) temp1 ) t
你可以尝试CTE- http://docs.oracle.com/cd/B28359_01/server 0.111/b28286/statements_10002.htm#i2161315 – 2013-05-13 10:29:40