Ing. Radek Žuja napsal(a):
Na to jak urychlit takovýto select, znám pouze 2 způsoby.
1 . Vytvořit agregační tabulku, která se bude plnit v triggerch a
sumovat to v ní jak potřebuji
Souhlasím, případně může být zajímavé použití "materialized view" jak v
jednom příspěvku doporučoval Robert
2. Vytvořit index, který bude obsahovat sloupec co sumuji a zároveň
všechyn sloupce dle kterých vybírám nebo groupuji.
Potom se použije index scan a ne ful table scan. Index scan je
rychlejší, (předpokládám že sloupců v indexu je MNOHEM méně než
sloupců v tabulce, jinak to nemá smysl => je menší než tabulka a jeho
scan je proto rychlejší)
Indexem samozřejmě zvětšíte objem databáze + přidáte nějakou režii na
jeho aktualizaci při každé změně.
Použitím triggeru vytvářejícího agregaci nad base tabulkuu zase
snižujete propustnot víceuživatelské změny dat v base tabulce, ale
objem dat v agregaci bude výrazně menší než objem indexu.
Tady už si tak jistý nejsem. Jsem přesvědčen, že v tomto konkrétním
případě Oracle udělá full table scan bez ohledu na jakýkoliv index. Tedy
pokud se jedná o sum přes všechny řádky. Podrobné zdůvodnění včetně
výpočtů je v dokumentaci k Oracle.Viz.třeba
http://download-uk.oracle.com/docs/cd/B10501_01/server.920/a96533/optimops.htm#44852
nebo http://relief.incad.cz/oracle9/server.920/a96533/optimops.htm#44852
Ale ozývám se proto, že to třeba špatně chápu a zajímalo by mě jak to je
opravdu s optimizerem v Oracle v tomto případě.
Pavel
--
Pavel Vedral
----------------------------------------------------------
Nez mi poslete prilohu .doc, .xls nebo .ppt, prectete si,
prosim, WWW stranku uvedenou na poslednim radku signatury:
http://www.gnu.org/philosophy/no-word-attachments.cs.html