我想计算我的数据库的大小。我将有一个3列(id,int,money)的表格,我将拥有2600万行,所有列都被占用。我的数据库有多大?另外,我在哪里可以找到所有SQL Server数据类型的大小?在哪里可以找到SQL Server数据类型的大小
回答
你可以使用下面的查询:上述查询的
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每个数据类型的大小。
这不显示大小。例如,XML空变量的大小是5,它在那里表示它的位置? –
你可以看到一个很好的补充(如果不是更好的选择)这个答案[这里](http://dba.stackexchange.com/questions/147296/where-to-find-the-size-of-sql-server -data-types/147315#147315) –
nvarchar是2个字节宽。所以sys.columns.max_length = 44,但实际长度是22.在那里会显示数据类型的实际大小?不是该类型的列的最大大小。 – TamusJRoyce
http://msdn.microsoft.com/en-us/library/ms187752.aspx
Money : 8 bytes
int : 4 bytes
id - depends on what you mean.
+其他行开销,如'NULL_BITMAP'和状态位可能的版本指针,如果启用了快照隔离。 –
如果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的大小,请留下评论!
- 1. 我在哪里可以找到列数据类型的Sql Server元数据?
- 2. 我在哪里可以获得大型Sql Server示例数据库?
- 3. 在哪里可以找到SQL Server中的存储过程msdb.dbo.sp_send_dbmail
- 4. 在哪里可以找到SQL Server 2008上的MyDataBase.BAK文件?
- 5. 我在哪里可以找到我的SipmleDB域大小
- 6. 哪里可以找到Sqlite数据库?
- 7. 我在哪里可以找到InlinePageParser类?
- 8. 我在哪里可以找到ServerConnection类?
- 9. 我在哪里可以找到Base64Encoder类?
- 10. 我在哪里可以找到dict_keys类?
- 11. 我在哪里可以找到Python类?
- 12. 我在哪里可以找到XrmServicesContext类?
- 13. 我在哪里可以在SharpGL中找到自定义的opengl数据类型?
- 14. 什么和哪里可以找到SQL Server 2005的数据库/表文件?
- 15. 从哪里可以得到SQL Server数据库文件?
- 16. RsiOPCAuto.dll ...哪里可以找到?
- 17. 哪里可以找到SQL 2008的数据库发布向导
- 18. 哪里可以找到ipseccmd.exe?
- 19. 我在哪里可以找到Python 3的内置数据类型?
- 20. 哪里可以找到
- 21. 我在哪里可以找到这些扩展的MIME类型?
- 22. 我在哪里可以找到lodash/fp的打字稿类型?
- 23. 我可以在哪里找到PL_check过滤的op类型?
- 24. 我在哪里可以找到大型Android 3. *示例?
- 25. 哪里可以找到某个类的基类型
- 26. 哪里可以找到NestedScrollView?
- 27. 我在哪里可以找到SQL Server Profiler中查询的参数?
- 28. 哪里可以找到AppCompatPreferenceActivity?
- 29. 哪里可以找到FlowPanel?
- 30. 我在哪里可以在Microsoft SQL Server中找到CLR函数文本?
也许是一个好开始:http://msdn.microsoft.com/en-us/library/ms175991.aspx –
你意识到你必须知道一个关于DB内部的很多才能得到一个准确的数字?使用您所需的设置创建具有虚拟数据的大小的表格可能更容易,然后检查大小。有一百个低级关注点可以增加或减少所需字节数。 – delnan