SQL Server: Table Dimension
E' possibile conoscere la dimensione massima del record della tabella tramite lo script qui sotto. Per mantenere prestazini accettabili è consigliabile non superare la dimensione di 8060 byte per fare in modo che ogni record possa occupare al massimo un datapage.
USE DatabaseName GO declare @tabella sysname DECLARE @dimensione bigint /* Imposto la tabella di cui voglio controllare la lunghezza del record */ select @tabella = 'Agenzie' /* Trovo la lunghezza */ SELECT @dimensione = 10 + SUM ( CASE DATA_TYPE WHEN 'bigint' THEN 8 WHEN 'int' THEN 4 WHEN 'smallint' THEN 2 WHEN 'tinyint' THEN 1 WHEN 'bit' THEN 1 WHEN 'datetime' THEN 8 WHEN 'smalldatetime' THEN 4 WHEN 'decimal' THEN CASE WHEN (NUMERIC_PRECISION Between 1 And 9) THEN 5 WHEN (NUMERIC_PRECISION Between 10 And 19) THEN 9 WHEN (NUMERIC_PRECISION Between 20 And 28) THEN 13 WHEN (NUMERIC_PRECISION Between 29 And 38) THEN 17 END WHEN 'numeric' THEN CASE WHEN (NUMERIC_PRECISION Between 1 And 9) THEN 5 WHEN (NUMERIC_PRECISION Between 10 And 19) THEN 9 WHEN (NUMERIC_PRECISION Between 20 And 28) THEN 13 WHEN (NUMERIC_PRECISION Between 29 And 38) THEN 17 END WHEN 'money' THEN 8 WHEN 'smallmoney' THEN 4 WHEN 'float' THEN 8 WHEN 'real' THEN 4 WHEN 'timestamp' THEN 8 WHEN 'image' THEN 16 WHEN 'text' THEN 16 WHEN 'ntext' THEN 16 WHEN 'uniqueidentifier' THEN 16 ELSE CASE WHEN DATA_TYPE like 'var%' THEN CHARACTER_MAXIMUM_LENGTH + 2 WHEN DATA_TYPE like 'nvar%' THEN CHARACTER_MAXIMUM_LENGTH + 2 ELSE CHARACTER_MAXIMUM_LENGTH END END ) FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = @tabella IF EXISTS (SELECT * FROM INFORMATION_SCHEMA.COLUMNS WHERE DATA_TYPE Like '%var%' And TABLE_NAME = @tabella) SET @dimensione = @dimensione + 2 /* Visualizzo i risultati */ SELECT -- Nome della tabella @tabella as [Tabella], -- Dimesione calcolata fino ad ora @dimensione + ( -- Calcolo maschera di bit per valori NULL select 2 + (((SELECT count(column_Name) FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = @tabella) + 7) / 8) ) + -- Overhead intestazione di riga 4 AS [Dimensione] /* Calcolo le righe per datapage */ declare @rowSize bigint set @rowSize = ( SELECT @dimensione + (SELECT 2 + (((SELECT count(column_Name) FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = @tabella) + 7) / 8) ) + 4 ) -- Calcolo il numero di righe: select 8060 / (@rowSize + 2) as numeroRighePerDataPage
















