Wpływ commitu w procedurze na insertowanie

0

Cześć

Mam prawdopodobnie trochę głupie pytanie, ale chyba jestem już zmęczony, a potrzebuję dowiedzieć się jednego zanim wyjdę. Czy w procedurze, w oraclu wg przykładu jak poniżej:

 
CREATE OR REPLACE PROCEDURE test_p AS
BEGIN
INSERT INTO test
SELECT TO_CHAR(DATA,'YYYY-MM') DATA,
SUM(LICZBA) SUMA 
FROM (
SELECT t.DATA,
t.kwota1*t2.kwota2 LICZBA
FROM test_dane t join test_dane2 t2 on t.id=t2.id ) W
GROUP BY TO_CHAR(DATA,'YYYY-MM');
COMMIT;
END test_p;

Dane będą insertowane i commitowane po każdym przetworzonym miesiącu? Tabele z których pobieram te dane są terabajtowe i aby nie zapchać pamięci całej hurtowni, a przy tym jej nie wywalić, muszę mieć pewność, że po jakimś tam okresie czasu (założyłem, że co miesiąc) dane będą insertowane przed przetworzeniem nowego okresu czasu, co pozwoli zwolnić pamięć tymczasową..

0

Wymyśliłem coś takiego dla pewności:

 
CREATE OR REPLACE PROCEDURE test_p AS
AS
DATA_STARTU DATE := TO_DATE('2015-01-01','YYYY-MM-DD');
DATA_END DATE := TO_DATE('2015-12-31','YYYY-MM-DD');
BEGIN
FOR i IN 0 .. Trunc(Months_Between(DATA_END, DATA_STARTU))
LOOP
INSERT INTO test
SELECT TO_CHAR(DATA,'YYYY-MM') DATA,
SUM(LICZBA) SUMA 
FROM (
SELECT t.DATA,
t.kwota1*t2.kwota2 LICZBA
FROM test_dane t JOIN test_dane2 t2 ON t.id=t2.id 
WHERE TO_CHAR(T.DATA,'YYYY-MM') = TO_CHAR(ADD_MONTHS(DATA_STARTU,i),'YYYY-MM')
AND TO_CHAR(T2.DATA,'YYYY-MM') = TO_CHAR(ADD_MONTHS(DATA_STARTU,i),'YYYY-MM')
) W
GROUP BY TO_CHAR(DATA,'YYYY-MM');
COMMIT;
END LOOP;
END test_p;

I tutaj mam drugie pytanie które mnie męczy.

Czy

 
TO_CHAR(DATA,'YYYY-MM') = TO_CHAR('2015-01-01','YYYY-MM')

Działa tak samo pod względem kosztu zapytania na dużych zbiorach danych, co:

 
DATA BETWEEN '2015-01-01' AND '2015-01-31'

??

0

Co do tego drugiego pytania, to raczej nikt nie jest jasnowidzem co do tego jakie są fizyczne struktury w tej bazie, tzn. partycjonowanie, indeksy, indeksy funkcyjne.

1 użytkowników online, w tym zalogowanych: 0, gości: 1