2012-05-17 33 views
20

Khi thêm cột vào bảng có giá trị mặc định và ràng buộc không rỗng. Có tốt hơn để chạy như một tuyên bố duy nhất hoặc để phá vỡ nó vào các bước trong khi cơ sở dữ liệu đang được tải.Cách tốt nhất để thêm cột có giá trị mặc định trong khi đang tải

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

SO VỚI

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

Có bao nhiêu hàng tồn tại trong bảng USER của bạn? –

+0

10.000 hàng tồn tại trong bảng người dùng. –

+0

Bạn có thể đo lường hiệu suất không? – Kiquenet

Trả lời

17

Hiệu suất phụ thuộc vào phiên bản Oracle bạn sử dụng. Khóa được tạo ra anyway.

Nếu phiên bản < = Oracle 11.1 thì # 1 cũng giống như # 2. Nó là chậm anyway. Bắt đầu với Oracle 11.2, Oracle đã giới thiệu một tối ưu hóa tuyệt vời cho câu lệnh đầu tiên (một lệnh làm tất cả). Bạn không cần phải thay đổi lệnh - Oracle chỉ hoạt động khác nhau. Nó lưu trữ giá trị mặc định chỉ trong từ điển dữ liệu thay vì cập nhật mỗi hàng vật lý.

Nhưng tôi cũng có thể nói, mà tôi gặp phải một số lỗi trong quá khứ liên quan đến tính năng này (trong Oracle 11.2.0.1)

  • thất bại của nhập khẩu truyền thống nếu xuất khẩu được thực hiện với trực tiếp = Y
  • tuyên bố hợp nhất có thể ném một ORA-600 [13.013] (lỗi oracle nội bộ)
  • một vấn đề hiệu suất trong các truy vấn sử dụng bảng như

tôi nghĩ rằng vấn đề này là cố định trong phiên bản hiện tại 11.2.0. 3, vì vậy tôi có thể khuyên bạn nên sử dụng tính năng này.

0

Một thời gian trước, chúng tôi đã đánh giá giải pháp khả thi của cùng một vấn đề. Trong dự án của chúng tôi, chúng tôi đã phải xóa tất cả các chỉ mục trên bảng, thực hiện thay đổi và khôi phục lại các chỉ mục.

0

Nếu hệ thống của bạn cần sử dụng bảng thì DBMS_Redefinition thực sự là lựa chọn duy nhất của bạn.

Các vấn đề liên quan