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
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.
Takže rozhodnout to musíte sám.
Radek
Dobry den,
Chtel bych se zeptat, jestli neexistuje najakym RYCHLY zpusobem
(tuning), jak ziskat pomoci SQL SUM, Sumu z tabluky citajici pres 30mil
zaznamu.
Jinimy slovy: zabranit pokazde full-table-scan.
PS: Pouziti funkcniho indexu neni mozne, kvuli agregacni funkci SUM.
Opravte me, jestli se mylim.
Dekuji
Robert Vilhelm
Zadani:
Pouzivam Oracle 9.2i
CREATE TABLE tabulka(
id NUMBER(18) NOT NULL,
sloupec NUMBER(18) NOT NULL,
CONSTRAINT tabulka_pk
PRIMARY KEY ( id )
);
"tabulka" ma pres 30mil zaznamu
SELECT SUM(sloupec)
FROM sloupec;
__________________________________________________________________
Kreditwerk Hypotheken-Management GmbH
Janderstraße 7-8
D-68199 Mannheim
Tel. + 49 (621) 87557-0
Fax: +49 (621) 87557-111
Geschäftsführer:
Beate Stollenwerk
Bernd Meier
Manfred Lund
Sitz der Gesellschaft: Handelsregister:
Mannheim Amtsgericht Mannheim HRB 8345
http://www.hypotheken-management.com
Als Inkassobüro zugelassen
__________________________________________________________________