次のような繰り返し値の複数の計算を回避することで、このクエリのパフォーマンスを向上させる方法はありますか
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 秒向上しました。オラクルが値を保持し、複数の計算を回避するためのより良い方法を提供するかどうかは素晴らしいことだと思います。また、私は避けたいと思います
実際のクエリ:
選択する * から ( 選択する row_number() 以上 (DCRAINTERNALNUMBER, ISSUE_DATE, PERMIT_ID による分割 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') を 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') を date_end として、 temp2. schema.TABLE_NAME temp2 から ) t
また、複数の計算を避けるためにこのようなものをシミュレートしようとしましたが、すべてのネストされた select ステートメントのために何も改善されません...クエリが約 25 秒遅くなります。
選択する * から ( row_order として (DCRAINTERNALNUMBER、ISSUE_DATE、PERMIT_ID 順、date_end desc によるパーティション) で row_number() を選択し、 temp1.* から ( to_date(regexp_replace(date_raw, '^(\d{4}-\d+-\d+)_.+$', '\1'), 'YYYY-MM-DD') を date_start として選択し、 to_date(regexp_replace(date_raw, '^.+_(\d{4}-\d+-\d+)_$', '\1'), 'YYYY-MM-DD') as date_end, temp2. から ( regexp_replace(my_source_file, 'TABLE_NAME_|_AM|_PM|_TO_|\.csv|\d+:\d{2}:\d{2}', '') を date_raw として選択し、 temp3.* schema.TABLE_NAME temp3 から ) 温度2 ) 温度1 ) t