Zuerst müssen Sie herausfinden, was der typische Wert für varchar2
Spalte ist. Die Gesamtgröße wird davon abhängen. Ich habe 2 Tabellen aus Ihrer BILL
Tabelle erstellt. BILLMAX
wobei ccode
immer 20 Char ('123456789')
und BILLMIN
dauert, die NULL
in ccode
immer hat. Die Ergebnisse sind:
TABLE_NAME NUM_ROWS AVG_ROW_LEN BLOCKS
BILLMAX 3938 37 28
BILLMIN 3938 16 13
select table_name, num_rows, avg_row_len, blocks from user_tables
where table_name in ('BILLMIN', 'BILLMAX')
Wie Sie sehen können, die Anzahl der Blöcke auf, dass abhängig ist. Verwenden Sie exec dbms_stats.GATHER_TABLE_STATS('YourSchema','BILL')
, um Werte in user_tables zu aktualisieren.
Die andere Sache, die Sie berücksichtigen müssen, ist, wie groß Ihre Extents sein werden. Zum Beispiel:
STORAGE (
INITIAL 64K
NEXT 1M
MINEXTENTS 1
MAXEXTENTS UNLIMITED
PCTINCREASE 0
BUFFER_POOL DEFAULT
)
generiert die ersten 16 Extents mit 8 Blöcken Größe. Danach wird mit der Erstellung von Extents mit einer Größe von 1 MB (128 Blöcke) begonnen.
Also für BILLMAX
wird es 768 Blöcke generieren und BILLMIN
wird 384 Blöcke dauern. Wie Sie sehen können, ist der Unterschied ziemlich groß.
Für BILLMAX
: 16 * 8 + 128 * 5 = 768
Für BILLMIN
: 16 * 8 + 128 * 2 = 384
Ich weiß, wie diese Informationen zu erhalten, mit 'dbms_stats.GATHER_TABLE_STATS'. Ich möchte das theoretisch berechnen. – AkaSh
Der zweite Teil meiner Antwort ist dafür. Zuerst müssen Sie herausfinden, wie viele Zeilen in einen Block passen und dann die Anzahl der erforderlichen Blöcke berechnen. Dann benutze die STORAGE-Klasse, um eine Vorstellung davon zu bekommen, wie deine EXTENTS aussehen und du hast das Ergebnis. – dcieslak