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

Odpovedet emailem