2012-05-17 18 views
20

Podczas dodawania kolumny do tabeli, która ma wartość domyślną i ograniczenie nie jest puste. Czy lepiej jest uruchomić jako pojedynczą instrukcję lub rozbić ją na kroki , gdy baza danych jest obciążona.Najlepszy sposób dodawania kolumny z wartością domyślną przy obciążeniu

ALTER TABLE user ADD country VARCHAR2(4) DEFAULT 'GB' NOT NULL 

VERSUS

ALTER TABLE user ADD country VARCHAR2(2) 
UPDATE user SET country = 'GB' 
COMMIT 
ALTER TABLE user MODIFY country DEFAULT 'GB' NOT NULL 
+1

Ile wierszy istnieje w tabeli USER? –

+0

10 000 wierszy istnieje w tabeli użytkownika. –

+0

Czy możesz zmierzyć wydajność? – Kiquenet

Odpowiedz

17

Wydajność zależy od używanej wersji Oracle. Blokady i tak są generowane.

Jeśli wersja < = Oracle 11.1, to # 1 działa tak samo jak # 2. W każdym razie jest powolny. Począwszy od Oracle 11.2, firma Oracle wprowadziła doskonałą optymalizację pierwszej instrukcji (jedna komenda robi to wszystko). Nie musisz zmieniać polecenia - Oracle po prostu zachowuje się inaczej. Przechowuje wartość domyślną tylko w słowniku danych zamiast aktualizować każdy wiersz fizyczny.

Ale muszę też powiedzieć, że natknąłem się kilka błędów w przeszłości związane z tą funkcją (w Oracle 11.2.0.1)

  • awarii tradycyjnej importu czy eksportu została wykonana z bezpośrednim = Y
  • oświadczenie seryjnej może rzucić ORA-600 [13013] (wewnętrzny błąd Oracle)
  • problem wydajność w zapytaniach za pomocą takich tablic

Myślę, że problemy są ustalone w aktualnej wersji 11.2.0. 3, więc mogę polecić korzystanie z tej funkcji.

0

Jakiś czas temu oceniano możliwe rozwiązania tego samego problemu. W naszym projekcie musieliśmy usunąć wszystkie indeksy z tabeli, wykonać zmiany i przywrócić indeksy z powrotem.

0

Jeśli Twój system musi korzystać z tabeli, to DBMS_Redefinition jest naprawdę jedynym wyborem.

Powiązane problemy