在哪里可以找到SQL Server数据类型的大小

时间:2012-08-28 19:18:30

标签: sql-server

我正在尝试计算数据库的大小。我将有一个包含3列(id,int,money)的表。我将拥有2600万行,所有列都被占用。我的数据库有多大?另外,在哪里可以找到所有SQL Server数据类型的大小?

4 个答案:

答案 0 :(得分:18)

您可以使用以下查询:

SELECT * FROM sys.types

以上查询的结果如下:

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    

您可以将max_length用于每种数据类型的大小。

答案 1 :(得分:1)

http://msdn.microsoft.com/en-us/library/ms187752.aspx

Money : 8 bytes
int : 4 bytes
id  - depends on what you mean.

答案 2 :(得分:1)

如果where子句中指定的表包含nvarchar,则此查询将正确显示该列的字符数!

这可以检测列是否“宽”并且基本上除以2.比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

当然,如果您知道该列是nvarchar,则可以将sys.columns上的max_length除以2。如果将来引入新的sql数据类型,这更适合以更好的方式发现表模式。你这么选择升级到它。相当小的边缘情况。

  

如果您发现边缘情况,请编辑并更正此答案   字节和位不正确。

详细说明:

-- ([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

如果有人知道SQL Server存储每种数据类型的位和字节大小。或者更好的获取sys.columns大小的方法,请发表评论!

答案 3 :(得分:1)

T-SQL 有一个函数:for i in range(1,10): - use dataset A1 for training - train model on dataset A1 - test on the testing dataset X - save model weights - restore model weights - now use dataset A2 - run model on trained weights to see initial accuracy - retrain the model on dataset A2 and keep previously saved weights - save model weights end 适用于所有 SQL Server 版本。

示例:

DATALENGTH

结果: DECLARE @lat DECIMAL(10, 7) = 3.14151415141514151415; SELECT @lat, DATALENGTH(@lat); 3.1415142(因为 DECIMAL(10,7) 使用 5 个字节来存储)。

文档:https://docs.microsoft.com/en-us/sql/t-sql/functions/datalength-transact-sql?view=sql-server-ver15

例如,我有一个名为 5 的表,其中包含以下列:(Applications)。我们知道,VARCHAR 不会分配所有空间(正是您需要的空间,因此 id VARCHAR(32), debug BIT, connectionString VARCHAR(2048), firebaseKey VARCHAR(4096) 在 VARCHAR 中是 1 个字节)。

这些查询:

'A'

将返回我的数据大小(在我的情况下,我的行是 8、2、366、4698(总计:5074)。该表中有 2 行。

请注意,这并不代表我的数据库的总大小(涉及页面、描述符、索引等。)*

MSSQL 具有内部存储过程,可以告诉您磁盘中数据库的确切大小:

  • SELECT SUM(DATALENGTH(id)) AS idSize, SUM(DATALENGTH(debug)) AS debugSize, SUM(DATALENGTH(connectionString)) AS connectionStringSize, SUM(DATALENGTH(firebaseKey)) AS firebaseKeySize FROM Applications; SELECT SUM( DATALENGTH(id) + DATALENGTH(debug) + DATALENGTH(connectionString) + DATALENGTH(firebaseKey) ) AS totalSize FROM Applications; 适用于所有数据库;
  • EXEC sp_spaceused; 用于特定表;
  • EXEC sp_spaceused N'schema.TableName'; 如果您想了解每个文件的详细信息。