Vezi şi SQL Server DataSizer Tool (e un fişier Excel cu formulele necesare pentru a calcula dimensiunea unei tabele).
În cazul menţionat, avem 4 coloane cu dimensiune fixă (4+4+8+8=24), iar indexul clustered pe ID înţeleg că e şi cheie primară (adică vreau să spun că ID este unic). Atunci avem Null_Bitmap=3 bytes, Row_Size=24+0+3+4=31 bytes, Rows_Per_Page=8096/(31+2)=245. Dacă luăm în considerare un Fill Factor de 90%, atunci Free_Rows_Per_Page=24, iar Num_Pages=5000/(245-24)=23, deci Leaf_space_used=8192*23=188416 bytes. Însă dacă introducem datele după ce indexul e deja creat, atunci fill factor-ul nu e luat în considerare, deci avem 21 de pagini, adică 172032 bytes.
Apoi ar fi dimensiunea indexului, pentru care avem Index_Row_Size=4+0+0+1+6=11 bytes, Index_Rows_Per_Page=8096/(11+2)=622, adică mult mai puţin decât numărul de pagini de date (21), deci avem nevoie doar de 2 pagini pentru index (pentru că leaf-level pages sunt chiar datele), deoarece e nevoie de 2 nivele. Rezultă Index_space_used=8192*2=16384 bytes, iar dimensiunea totală ar fi aproximativ 184KB.
Din fişierul de mai sus iese altceva (192KB), dar oricum, ar trebui să poţi obţine o valoare orientativă. La acest număr de rânduri, poţi încerca şi practic:
CREATE TABLE TabelaA (
ID int IDENTITY PRIMARY KEY,
VendorID int,
BalanceDue money,
DateDue datetime
)
INSERT INTO TabelaA (VendorID, BalanceDue, DateDue)
SELECT TOP 5000 1, 0, GETDATE() FROM syscolumns a, syscolumns b
EXEC sp_spaceused 'TabelaA', @updateusage='true'
Şi observăm că tabela ocupă 200KB (dintre care 16KB sunt nefolosiţi).
Răzvan