2013-03-29 14 views
7

Tworzę GLOBAL TEMPORARY TABLE w DB2. a kiedy surfowałem, otrzymałem dwie możliwości stworzenia 1. Zadeklaruj 2. Utwórz.DEKLARACJA GLOBALNA TABELA CZASOWA V Tworzenie tabeli globalnej w DB2

1. DECLARE GLOBAL TEMPORARY TABLE SESSION.TEMP_EMP 
     (EMPNO CHAR(6) NOT NULL, 
     SALARY DECIMAL(9, 2), 
     BONUS DECIMAL(9, 2), 
     COMM DECIMAL(9, 2)) WITH REPLACE ON COMMIT PRESERVE ROWS ; 

2. CREATE GLOBAL TEMPORARY TABLE TMPDEPT 
     (TMPDEPTNO CHAR(3)  NOT NULL, 
     TMPDEPTNAME VARCHAR(36) NOT NULL, 
     TMPMGRNO CHAR(6), 
     TMPLOCATION CHAR(16)) ON COMMIT PRESERVE ROWS ; 

i ze strony IBM dostałem informacje, że stworzenie jest najlepszy, ponieważ jej jako trwałe, dzięki czemu wszystkie sesje użytkowników do dostępu do tej samej definicji tabeli bez konieczności zadeklarować przy starcie i wiele innych zalet.

Link: http://www.ibm.com/developerworks/data/library/techarticle/dm-0912globaltemptable/

i miałem kilka zapytań w użyciu stworzyć ponad zadeklarować:

  1. nie mogłem znaleźć słowa kluczowego Replace podczas korzystania CREATE GLOBAL TEMPORARY TABLE.

  2. rozważyć jeden scenariusz, Otwieram połączenie i wykonywania procedury przechowywanej,
    ramach tej procedury przechowywanej m tworzenia globalnej tabeli temp iz w tym procedura składowana apeluję Inna procedura przechowywana które znowu mają same Tworzenie Temp tabela oświadczenie .. co się stanie w tym przypadku .. czy to rzucić błąd, ponieważ obie te są na same i w ramach jednego połączenia?

  3. Zadeklarowanie sesji i tworzenie nie mają? czy to wiąże się z uporem?

  4. w performace mądry, co jest lepsze? Zadeklarować temp lub utworzyć temp?

  5. Zaproponuj niektóre scenariusze, aby jak najlepiej wykorzystać deklarację/stworzyć!

Odpowiedz

7

Istnieje good article from Craig S. Mullins, który obejmuje główne różnice między tymi dwoma. W większości przypadków działają tak samo.

Utworzone tablice tempa są tworzone w DSNDB07, która jest działającą bazą danych plików (ten sam obszar pamięci używany podczas instrukcji SQL, które wymagają roboczej pamięci). Deklarowane tablice Temp są przechowywane w tymczasowych obszarach tabel, które musisz utworzyć.

Istnieją pewne minusy dla CTT to:

  • Ponieważ nie są one trwałe, pewne typowe operacje na bazie danych tym blokowania, logowania i odzysku nie stosuje się do utworzonych tabel tymczasowych.

  • Indeksy nie mogą być tworzone na utworzonych tabelach tymczasowych, więc cały dostęp odbywa się poprzez kompletne skanowanie tabeli.

  • Ograniczenia nie mogą być tworzone na utworzonych tabelach tymczasowych.

  • Wartość pusta jest jedyną wartością domyślną dozwoloną dla kolumn utworzonej tabeli tymczasowej .

  • Utworzonych tabel tymczasowych nie można odwoływać się do programów narzędziowych DB2.

  • Utworzonych tabel tymczasowych nie można określić jako obiektu instrukcji UPDATE o numerze .

  • Podczas usuwania z utworzonej tabeli tymczasowej, wszystkie wiersze muszą być usunięte z .

  • Mimo że widoki można tworzyć na utworzonych tabelach tymczasowych, NIE MOŻNA określać OPCJONALNEGO OPCJONOWANIA WITH .

DTT są zwykle znacznie bardziej elastyczna:

  • zadeklarowanych tabel tymczasowych może mieć indeksy i sprawdź ograniczenia zdefiniowane na nich.

  • Możesz wysyłać instrukcje UPDATE i umieścić instrukcje DELETE względem zadeklarowanej tabeli tymczasowej.

  • Możesz domyślnie zdefiniować kolumny zadeklarowanej tabeli tymczasowej i użyć tabeli wyników z SELECT.

teraz za swoimi ponumerowanych pytań:

1. & 2. Nie ma ani jednego. Wierzę (i nie jestem w 100% pewny, czy to jest dokładne, nasz sklep w znacznym stopniu wykorzystuje DTT we wszystkich przypadkach), że CTT jest zadeklarowany jeden raz (przez a DBA), a następnie programiści aplikacji mogą go używać w dowolnym sesja. Każde połączenie będzie miało własną kopię, a gdy aplikacja się rozłączy, dane przechowywane w tym CTT w tej sesji znikną.

3. SESSION to tylko identyfikator schematu dla DTT. Pokazuje, że jest to tymczasowa tabela, która nie jest trwała.

4. Myślę, że oba będą miały mniej więcej taki sam wynik. Będą szybsze niż standardowe tabele, ponieważ blokowanie, rejestrowanie, odzyskiwanie itp. Nie będą miały zastosowania.

5. Ogólnie powiedziałbym, że DTT są do zrobienia, ale CTTs są użyteczne (jak Craig mówi w swoim artykule):

(CTTs) należy rozważyć przede wszystkim gdy nie aktualizowanie danych tymczasowych jest potrzebny, a dostęp do danych tymczasowych jest wyłącznie sekwencyjny.

0
  1. Stwierdziliśmy, że utworzone tabele Temp mają - w naszym przypadku - lepsze wyniki niż tablice DTT. Może to być wyjątek (to zależy), ale bodźcem do zmiany była obserwacja liczby Przyrostowych wiązań, które były wykonywane przy użyciu DTT. Każda transakcja wymagała 23 tabel tymczasowych. Przeprowadziliśmy równoległy test i stwierdziliśmy, że CTT spowodowały ogromne spadki zarówno w czasie procesora, jak i In_DB2.Widzieliśmy również krople w oczekiwaniu na blokadę i blokowanie i stwierdziliśmy, że w przypadku CTT nasz procesor ZIIP zaczął przekraczać nasz procesor GP, co sprawia, że ​​wszyscy są zadowoleni.

Nie potrzebowaliśmy indeksów DTT ani dostępu do aktualizacji i nie mieliśmy żadnego zastosowania w przypadku żadnego RI.