Sto cercando di calcolare la dimensione del mio database. Avrò una tabella con 3 colonne (id, int, money) avrò 26 milioni di righe con tutte le colonne occupate. Quanto sarà grande il mio database? Inoltre, dove posso trovare la dimensione di tutti i tipi di dati di SQL Server?Dove trovare la dimensione dei tipi di dati di SQL Server
risposta
tuo grado di utilizzare al di sotto di query:
SELECT * FROM sys.types
risultato di sopra della query è qui sotto:
name system_type_id user_type_id schema_id principal_id max_length precision scale collation_name is_nullable is_user_defined is_assembly_type default_object_id rule_object_id is_table_type
-------------------- -------------- ------------ --------- ------------ ---------- --------- ----- ----------------- ----------- --------------- ---------------- ----------------- -------------- -------------
image 34 34 4 NULL 16 0 0 NULL 1 0 0 0 0 0
text 35 35 4 NULL 16 0 0 Persian_100_CI_AI 1 0 0 0 0 0
uniqueidentifier 36 36 4 NULL 16 0 0 NULL 1 0 0 0 0 0
date 40 40 4 NULL 3 10 0 NULL 1 0 0 0 0 0
time 41 41 4 NULL 5 16 7 NULL 1 0 0 0 0 0
datetime2 42 42 4 NULL 8 27 7 NULL 1 0 0 0 0 0
datetimeoffset 43 43 4 NULL 10 34 7 NULL 1 0 0 0 0 0
tinyint 48 48 4 NULL 1 3 0 NULL 1 0 0 0 0 0
smallint 52 52 4 NULL 2 5 0 NULL 1 0 0 0 0 0
int 56 56 4 NULL 4 10 0 NULL 1 0 0 0 0 0
smalldatetime 58 58 4 NULL 4 16 0 NULL 1 0 0 0 0 0
real 59 59 4 NULL 4 24 0 NULL 1 0 0 0 0 0
money 60 60 4 NULL 8 19 4 NULL 1 0 0 0 0 0
datetime 61 61 4 NULL 8 23 3 NULL 1 0 0 0 0 0
float 62 62 4 NULL 8 53 0 NULL 1 0 0 0 0 0
sql_variant 98 98 4 NULL 8016 0 0 NULL 1 0 0 0 0 0
ntext 99 99 4 NULL 16 0 0 Persian_100_CI_AI 1 0 0 0 0 0
bit 104 104 4 NULL 1 1 0 NULL 1 0 0 0 0 0
decimal 106 106 4 NULL 17 38 38 NULL 1 0 0 0 0 0
numeric 108 108 4 NULL 17 38 38 NULL 1 0 0 0 0 0
smallmoney 122 122 4 NULL 4 10 4 NULL 1 0 0 0 0 0
bigint 127 127 4 NULL 8 19 0 NULL 1 0 0 0 0 0
hierarchyid 240 128 4 NULL 892 0 0 NULL 1 0 1 0 0 0
geometry 240 129 4 NULL -1 0 0 NULL 1 0 1 0 0 0
geography 240 130 4 NULL -1 0 0 NULL 1 0 1 0 0 0
varbinary 165 165 4 NULL 8000 0 0 NULL 1 0 0 0 0 0
varchar 167 167 4 NULL 8000 0 0 Persian_100_CI_AI 1 0 0 0 0 0
binary 173 173 4 NULL 8000 0 0 NULL 1 0 0 0 0 0
char 175 175 4 NULL 8000 0 0 Persian_100_CI_AI 1 0 0 0 0 0
timestamp 189 189 4 NULL 8 0 0 NULL 0 0 0 0 0 0
nvarchar 231 231 4 NULL 8000 0 0 Persian_100_CI_AI 1 0 0 0 0 0
nchar 239 239 4 NULL 8000 0 0 Persian_100_CI_AI 1 0 0 0 0 0
xml 241 241 4 NULL -1 0 0 NULL 1 0 0 0 0 0
sysname 231 256 4 NULL 256 0 0 Persian_100_CI_AI 0 0 0 0 0 0
CalculatedCreditInfo 243 257 9 NULL -1 0 0 NULL 0 1 0 0 0 1
udt_QoutaDetail 243 258 21 NULL -1 0 0 NULL 0 1 0 0 0 1
BeforeUpdate 243 259 22 NULL -1 0 0 NULL 0 1 0 0 0 1
udt_StoreInventory 243 260 26 NULL -1 0 0 NULL 0 1 0 0 0 1
udt_WKFHistory 243 261 32 NULL -1 0 0 NULL 0 1 0 0 0 1
IDTable 243 262 1 NULL -1 0 0 NULL
è possibile utilizzare max_length per dimensione di ogni tipo di dati.
questo non mostra la dimensione. per esempio, la dimensione di una variabile vuota XML è 5, dove lo dice lì? –
puoi vedere un buon complemento (se non un'opzione migliore) per questa risposta [qui] (http://dba.stackexchange.com/questions/147296/where-to-find-the-size-of-sql-server -data-types/147315 # 147315) –
nvarchar ha una larghezza di 2 byte. quindi sys.columns.max_length = 44. ma la lunghezza effettiva è 22. dove verrà visualizzata la dimensione effettiva del tipo di dati? Non la dimensione massima che può essere una colonna di quel tipo. – TamusJRoyce
http://msdn.microsoft.com/en-us/library/ms187752.aspx
Money : 8 bytes
int : 4 bytes
id - depends on what you mean.
+ altro overhead di riga come 'NULL_BITMAP' e bit di stato possibile puntatore versione se l'isolamento dello snapshot è abilitato. –
Se la tabella specificata nella clausola where contiene un nvarchar, questa query fornirà quanti caratteri ci sono per quella colonna correttamente!
Questo rileva se la colonna è "ampia" e sostanzialmente si divide per 2. Più ampia di solo nvarchar.
SELECT c.name, (CASE WHEN LEFT(ts.name, 1) = 'n' AND ts.[precision] = 0 AND ts.[scale] = 0 THEN c.max_length/ts.[bytes] ELSE c.max_length END) AS [length]
FROM sys.columns AS c
INNER JOIN sys.tables AS t
ON t.object_id = c.object_ID
INNER JOIN
(
SELECT *, (CASE WHEN [bits] = -1 THEN -1 ELSE ([bits] + 7)/8 END) AS [bytes]
FROM (
SELECT *, (CASE WHEN max_length >= 256 THEN (CASE WHEN LEFT(name, 1) = 'n' AND [precision] = 0 AND [scale] = 0 THEN 16 ELSE 8 END) ELSE max_length END) AS [bits]
FROM sys.types AS iits
) AS its
) AS ts
ON ts.user_type_id = c.user_type_id
WHERE t.name LIKE 'tb_tablename' -- LIKE is case insensitive
Naturalmente, si può semplicemente dividere il max_length sys.columns per 2 se si conosce la colonna è un nvarchar. Questo è più utile per scoprire lo schema della tabella in un modo che sembra migliore se i nuovi tipi di dati SQL vengono introdotti in futuro. E tu, scegli di aggiornarlo. Astuccio dal bordo piuttosto piccolo.
Si prega di modificare e correggere questa risposta se si trova un caso limite in cui byte e bit sono corretti.
Dettagli:
-- ([bits] + 7)/8 means round up
--
-- Proof:
-- o (1 bit + 7 = 8)/8 = 1 byte used
-- o ((8 + 8 + 1 = 17 bytes) + 7 = 24)/8 = 3 byes used
-- o ((8 + 8 + 7 = 23 bytes) + 7 = 30)/8 = 3.75 = integer division removes decimal = 3
SELECT *, (CASE WHEN [bits] = -1 THEN -1 ELSE ([bits] + 7)/8 END) AS [bytes]
FROM (
SELECT *, (CASE WHEN max_length >= 256 THEN (CASE WHEN LEFT(name, 1) = 'n' AND [precision] = 0 AND [scale] = 0 THEN 16 ELSE 8 END) ELSE max_length END) AS [bits]
FROM sys.types AS its
) AS ts
Se qualcuno sa che SQL Server archivia le dimensioni bit e byte per ciascun tipo di dati. O un modo migliore per ottenere la dimensione di sys.columns, per favore lascia un commento!
- 1. SQL Server: tabella di conversione dei tipi di dati impliciti
- 2. Dove trovare l'elenco dei tipi di eventi?
- 3. Dove trovo i metadati del server Sql per i tipi di dati della colonna?
- 4. Dove trovare la stored procedure msdb.dbo.sp_send_dbmail in SQL Server
- 5. Ricerca dei tipi di dati di una tabella temporanea SQL
- 6. Limitazione dei tipi di dati
- 7. dimensione dei dati di query scitkit-imparare deve corrispondere la dimensione dei dati formazione
- 8. Raggruppamento dei dati in SQL Server
- 9. Istanza Amazon EC2 - Come trovare la password di SQL Server
- 10. Dove trovare la definizione completa di tipo off_t?
- 11. Trova la dimensione di più database in SQL Server 2005
- 12. I tipi di dati devono avere dimensioni di 2 potenze in SQL Server?
- 13. Utilizzo dei tipi di dati in Haskell
- 14. Elenco dei tipi di attributo Dati principali?
- 15. SQL Server 2008 R2 Dimensione massima varbinary
- 16. SQL 2008 - varchar (max) vs tipi di dati testo
- 17. Dove si trova la directory dei dati in Redis?
- 18. Come posso convertire in modo programmatico i tipi di dati SQL in tipi di dati .Net?
- 19. SQL Server Tipo di dati esadecimali
- 20. Soluzione di archiviazione dati SQL Server
- 21. Come trovare la porta in esecuzione di SQL Server?
- 22. Java definisce la dimensione dei suoi tipi primitivi ovunque?
- 23. dimensione massima dei BSS e dei dati
- 24. Come trovare i tipi di colonna derivati di una vista in SQL Server 2005?
- 25. Non riesci a trovare la data tipo di dati in SQL Server 2005
- 26. Revisione dati di SQL Server modifica
- 27. Rappresenta "Qualcosa" Dati in SQL Server
- 28. Ottieni la dimensione dei dati non compressi in zlib?
- 29. tipi di dati mysql equivalenti
- 30. Dove impostare la dimensione del popover?
Probabilmente un buon inizio: http://msdn.microsoft.com/en-us/library/ms175991.aspx –
Ti rendi conto che devi conoscere MOLTO su internals DB per arrivare a un numero preciso? Probabilmente è più facile creare una tabella di quelle dimensioni con dati fittizi con le impostazioni che desideri e quindi controllare la dimensione. Ci sono un centinaio di preoccupazioni di basso livello che possono aggiungere o sottrarre dal numero di byte necessari. – delnan