megoldva: Oracle hint ideiglenes tábla helyett

Van egy Oracle leválogatásom, melyben temporális táblát használok. Ehhez elszöszöl jó egy órát a rendszer. Aztán e tábla segítségével a másik leválogatás már pillanatok alatt lefut.

Szerettem volna megúszni a temporális táblát, és betettem az egészet egy

select q.valami from (select ....) q
join plimplamplum
join cicafule

subselect zárójelbe, de így kivárhatatlanul hosszú lett a dolog (időtúllépéssel leállt).

Van valami olyan Optimizer hint, amivel rá tudom venni, hogy először gyártsa le a q-t, és utána már ezt használja? Itt https://docs.oracle.com/cd/B10500_01/server.920/a96533/hintsref.htm nézegettem, de nem látom a fától az erdőt. Esetleg PUSH_SUBQ?

Hozzászólások

Visszakérdezhetek: mi az a temporális tábla?

Nem a nézettáblára (,,view'') gondolsz, amely tuti, hogy a memóriában keletkezik és létezik, s ezáltal is sokkal gyorsabban elérhető belőle az adat, mint a fizikai táblában (,,table'')?

Ha viszont a SELECT-tet kell optimalizálni, érdemes elovasni ezt, illetve ezt (talán ez utóbbi látványosabb, mint az általad adott linken levő).

G.
============================================
"Share what you know. Learn what you don't."

nem is neked irtam :)

Csak a amire valaszoltam abbol az jon le hogy milyen kurva jo a view szemben egy temp tablaval.

Igazabol nem sokkal jobb ( ha a problema az hogy a select lassan dolgozodik fel )

A View in Oracle and in other database systems is simply the representation of a SQL statement that is stored in memory so that it can easily be re-used.

Note that this command does not result in anything being actually stored in the database at all except for a data dictionary entry that defines this view. This means that every time you query this view, Oracle has to go out and execute the view and query the database data

Amit Te keresel az a select with... /*+materialize*/.

btw, megírtam volna a selectet is, de sajnos ezt a join így, join úgy szintaktikát képtelen vagyok az agyamban rögzíteni, mikor van sokkal egyszerűbb :D

A sima MATERIALIZE nem jött be (egész éjjel futott a szkript, eredménytelenül), most megpróbálom ezt az előreszedett WITH CTE megoldást...

Ééééés sikerrel jártam! Itt a nyerő javaslat!!! :-)
Köszönöm.


with q as (
select /*+ MATERIALIZE */
...
where
...
)
select
...
from q
join plimplamplum
join cicafule
...