Câu trả lời tùy thuộc vào việc bạn đang nói về một cột trong bảng cơ sở dữ liệu hay biến trong chương trình PL/SQL.
cột Cơ sở dữ liệu
Dung lượng bộ nhớ sử dụng là tương ứng với kích thước của dữ liệu được lưu trữ.
PL/SQL biến
Nếu biến được khai báo với kích thước 1-3999 (11g +)/1999 (10g hoặc sớm hơn), bộ nhớ sẽ được phân bổ cho độ dài tối đa (tức là VARCHAR2 (100) sẽ yêu cầu ít nhất 100 byte bộ nhớ).
Nếu biến được khai báo với kích thước 4000 (11g +)/2000 (10g hoặc sớm hơn) hoặc cao hơn, bộ nhớ sẽ được phân bổ theo kích thước của dữ liệu được lưu trữ. (Một câu hỏi phụ thú vị sẽ là, nếu giá trị của biến được thay đổi, như thế nào là bộ nhớ thay đổi kích cỡ - nó tái phân bổ đệm khác với kích thước mới?)
tham chiếu cho 10g: PL/SQL Datatypes
biến VARCHAR2 nhỏ được tối ưu hóa cho hiệu suất, và những cái lớn hơn được tối ưu hóa để sử dụng bộ nhớ hiệu quả. Điểm cắt là 2000 byte. Đối với một VARCHAR2 là 2000 byte hoặc dài hơn, PL/SQL tự động phân bổ chỉ đủ bộ nhớ để giữ giá trị thực tế. Đối với một biến VARCHAR2 ngắn hơn 2000 byte, PL/SQL preallocates chiều dài khai báo đầy đủ của biến. Ví dụ: nếu bạn chỉ định cùng một giá trị 500 byte cho biến VARCHAR2 (2000 BYTE) và biến VARCHAR2 (1999 BYTE), biến trước đó chiếm 500 byte và sau đó chiếm 1999 byte.
Nguồn
2009-12-11 05:28:52
Tôi đã nói về bảng-cột, nhưng tham chiếu PL/SQL cũng khá thú vị, cảm ơn! (+1) –
Đúng là lưu ý rằng nó trở nên phù hợp hơn khi bạn bắt đầu viết mã PL/SQL tương tác với dữ liệu bảng - tức là bạn có thể có xu hướng khai báo các biến VARCHAR2 với cùng kích thước như cột cơ sở dữ liệu. Tất nhiên, yếu tố sử dụng bộ nhớ này là xem xét ít quan trọng nhất liên quan đến cột và định cỡ biến. –
Trên vấn đề PL/SQL, điểm ngắt cho vị trí cấp phát bộ nhớ động PL/SQL đã thay đổi từ phiên bản này sang phiên bản khác. Ví dụ, trong 10g nó đã được tăng lên từ đến 2000 nhưng nó lên đến 4000 trong 11.1. Xem http://download.oracle.com/docs/cd/B28359_01/appdev.111/b28370/tuning.htm#BCGEGEEG –