10

データベースのサイズを計算しようとしています。3列(id、int、money)のテーブルがあります。すべての列が占有されている2600万行があります。私のデータベースはどのくらいの大きさになりますか?また、すべてのSQL Serverデータ型のサイズはどこにありますか?

4

4 に答える 4

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を使用できます。

于 2012-08-29T04:08:45.810 に答える
1

T-SQLには、そのための機能がありDATALENGTHます。すべてのSQLServerバージョンに対してです。

例:

DECLARE @lat DECIMAL(10, 7) = 3.14151415141514151415;

SELECT @lat, DATALENGTH(@lat);

結果: 3.1415142および5(DECIMAL(10,7)は5バイトを使用して格納されるため)。

ドキュメント:https ://docs.microsoft.com/en-us/sql/t-sql/functions/datalength-transact-sql?view = sql-server-ver15

たとえば、Applications次の列で呼び出されるテーブルがあります:( id VARCHAR(32), debug BIT, connectionString VARCHAR(2048), firebaseKey VARCHAR(4096))。ご存知のように、VARCHARはすべてのスペースを割り当てるわけではありません(必要なものだけなので'A'、VARCHARの1バイトも割り当てられます)。

これらのクエリ:

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;

私のデータサイズを返します(私の場合、私の行では、8、2、366、4698(合計:5074)です)。そのテーブルには2つの行があります。

これは私のデータベースの合計サイズを表していないことに注意してください(ページ、記述子、インデックスなどが関係しています)。 *

MSSQLには、ディスク内のデータベースの正確なサイズを通知するための内部ストアドプロシージャがあります。

  • EXEC sp_spaceused;すべてのデータベース。
  • EXEC sp_spaceused N'schema.TableName';特定のテーブルの場合。
  • EXEC sp_helpdb N'DatabaseName';各ファイルの詳細が必要な場合。
于 2021-01-12T00:11:50.393 に答える
0

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

Money : 8 bytes
int : 4 bytes
id  - depends on what you mean.
于 2012-08-28T19:21:06.697 に答える
0

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

SQLServerが各データ型のビットサイズとバイトサイズを格納していることを誰かが知っている場合。または、sys.columnsサイズを取得するためのより良い方法は、コメントを残してください!

于 2017-10-11T19:42:31.507 に答える