如何获得SQL server中所有数据类型所消耗的最大内存?
是否可以获取中的数据类型所消耗的内存 SQL server?我想以这种方式获得记忆-如何获得SQL server中所有数据类型所消耗的最大内存?,sql,sql-server,sql-server-2008,sql-server-2005,Sql,Sql Server,Sql Server 2008,Sql Server 2005,是否可以获取中的数据类型所消耗的内存 SQL server?我想以这种方式获得记忆- Id, datatypes, base_memory (in bytes), memory_multiplier 1, varchar(x), 2, x 2, int, 2, 1 et cetra. 做这样一张桌子有什么问题吗 我需要这张桌子,这样我就可以用它来找出答案 任意行中的一行可以使用的最大内存 sql server表 如果没有用于获取我的表的SQL查询,则 我可以为它手动创建一个表。但是,这是我的桌
Id, datatypes, base_memory (in bytes), memory_multiplier
1, varchar(x), 2, x
2, int, 2, 1
et cetra.
做这样一张桌子有什么问题吗
我需要这张桌子,这样我就可以用它来找出答案
任意行中的一行可以使用的最大内存
sql server表
如果没有用于获取我的表的SQL查询,则
我可以为它手动创建一个表。但是,这是我的桌子
正确的方法 如果使用varchar(max)、text、image等类型,您可能会遇到问题,因为它们可能会占用大量内存——但是,您可能希望使用的起点是view sys.columns,即
select top 1000 * from information_schema.columns
select top 1000 * from information_schema.columns where table_name = 'mytable'
看看结果,一些有趣的列是character_octet_length和character_maximum_length。但是您将看到life integer的类型将有一个空值——尽管这些值服从于您开始使用的方法
增加
还请注意,文本/图像等不计入行大小的8K限制,因此根据计算rou大小的原因,您可能希望排除。这不包括sql server用于存储行的一些额外数据库开销
增加
固定大小的元素(如integer)将显示为null。您可以使用开始使用的方法获取正确的大小,或者使用等效的case语句获取以字节为单位的列大小。我想不起来sql提供的数据格式是否完全符合您的要求
我后来记得这件事
基本类型大小是在sys.types中定义的——别以为我用过这个,很容易忘记。函数DATALENGTH(ColumnName)会有帮助。它返回长度
以字节为单位的数据量
查询-
SELECT COLUMN_NAME, DATALENGTH(COLUMN_NAME) as DataSize
from information_schema.columns where table_name = 'MyTableName'
SELECT SUM(DataSize) AS MaxRowSize
FROM
(
SELECT COLUMN_NAME, DATALENGTH(COLUMN_NAME) as DataSize
from information_schema.columns where table_name = 'shop'
) AS SCHEM
DECLARE @maxRowSize int
SET @maxRowSize =
(
SELECT SUM(DataSize) AS MaxRowSize
FROM
(
SELECT COLUMN_NAME, DATALENGTH(COLUMN_NAME) as DataSize
from information_schema.columns
where table_name = 'shop' -- enter table name only, do NOT enter the schema
) AS SCHEM
)
SELECT COUNT(Id) as NumOfRows,
@maxRowSize as MaxRowBytes,
COUNT(id) * @maxRowSize as MaxQueryBytes
FROM Shop -- Enter schema name if needed
COLUMN_NAME DataSize
id 4
date 8
sales 10
这是可行的,但我不知道这种方法是否有任何缺陷
表中一行的最大大小-
SELECT COLUMN_NAME, DATALENGTH(COLUMN_NAME) as DataSize
from information_schema.columns where table_name = 'MyTableName'
SELECT SUM(DataSize) AS MaxRowSize
FROM
(
SELECT COLUMN_NAME, DATALENGTH(COLUMN_NAME) as DataSize
from information_schema.columns where table_name = 'shop'
) AS SCHEM
DECLARE @maxRowSize int
SET @maxRowSize =
(
SELECT SUM(DataSize) AS MaxRowSize
FROM
(
SELECT COLUMN_NAME, DATALENGTH(COLUMN_NAME) as DataSize
from information_schema.columns
where table_name = 'shop' -- enter table name only, do NOT enter the schema
) AS SCHEM
)
SELECT COUNT(Id) as NumOfRows,
@maxRowSize as MaxRowBytes,
COUNT(id) * @maxRowSize as MaxQueryBytes
FROM Shop -- Enter schema name if needed
COLUMN_NAME DataSize
id 4
date 8
sales 10
您感兴趣的数据集的最大大小-
SELECT COLUMN_NAME, DATALENGTH(COLUMN_NAME) as DataSize
from information_schema.columns where table_name = 'MyTableName'
SELECT SUM(DataSize) AS MaxRowSize
FROM
(
SELECT COLUMN_NAME, DATALENGTH(COLUMN_NAME) as DataSize
from information_schema.columns where table_name = 'shop'
) AS SCHEM
DECLARE @maxRowSize int
SET @maxRowSize =
(
SELECT SUM(DataSize) AS MaxRowSize
FROM
(
SELECT COLUMN_NAME, DATALENGTH(COLUMN_NAME) as DataSize
from information_schema.columns
where table_name = 'shop' -- enter table name only, do NOT enter the schema
) AS SCHEM
)
SELECT COUNT(Id) as NumOfRows,
@maxRowSize as MaxRowBytes,
COUNT(id) * @maxRowSize as MaxQueryBytes
FROM Shop -- Enter schema name if needed
COLUMN_NAME DataSize
id 4
date 8
sales 10
商店表架构信息-
SELECT COLUMN_NAME, DATALENGTH(COLUMN_NAME) as DataSize
from information_schema.columns where table_name = 'MyTableName'
SELECT SUM(DataSize) AS MaxRowSize
FROM
(
SELECT COLUMN_NAME, DATALENGTH(COLUMN_NAME) as DataSize
from information_schema.columns where table_name = 'shop'
) AS SCHEM
DECLARE @maxRowSize int
SET @maxRowSize =
(
SELECT SUM(DataSize) AS MaxRowSize
FROM
(
SELECT COLUMN_NAME, DATALENGTH(COLUMN_NAME) as DataSize
from information_schema.columns
where table_name = 'shop' -- enter table name only, do NOT enter the schema
) AS SCHEM
)
SELECT COUNT(Id) as NumOfRows,
@maxRowSize as MaxRowBytes,
COUNT(id) * @maxRowSize as MaxQueryBytes
FROM Shop -- Enter schema name if needed
COLUMN_NAME DataSize
id 4
date 8
sales 10
使用AdventureWorks2008R2数据库进行样本测试-
将查询结果保存到文本文件中。请参见文本文件的大小。如果它大约等于我的查询返回的值,那么我认为我们应该
很好
select *
from person.Person
where FirstName = 'crystal'
-- Records = 22
文件:大小=15.2KB
查询:6116字节
结果-不适用于此表:(
测试2-
SELECT COLUMN_NAME, DATALENGTH(COLUMN_NAME) as DataSize
from information_schema.columns where table_name = 'MyTableName'
SELECT SUM(DataSize) AS MaxRowSize
FROM
(
SELECT COLUMN_NAME, DATALENGTH(COLUMN_NAME) as DataSize
from information_schema.columns where table_name = 'shop'
) AS SCHEM
DECLARE @maxRowSize int
SET @maxRowSize =
(
SELECT SUM(DataSize) AS MaxRowSize
FROM
(
SELECT COLUMN_NAME, DATALENGTH(COLUMN_NAME) as DataSize
from information_schema.columns
where table_name = 'shop' -- enter table name only, do NOT enter the schema
) AS SCHEM
)
SELECT COUNT(Id) as NumOfRows,
@maxRowSize as MaxRowBytes,
COUNT(id) * @maxRowSize as MaxQueryBytes
FROM Shop -- Enter schema name if needed
COLUMN_NAME DataSize
id 4
date 8
sales 10
表1薪金-
[id] [int], [name] [varchar](50), [salary] [decimal](18, 2)
表-
id name salary
1 azamat bagatov 100.50
2 borat 25.00
3 coci buchek 200.50
文件:大小=65字节
查询:大小=72字节
结果-非常成功???查看
信息\u架构。列
这些查询没有给出列的大小。我希望至少看到int=4字节。添加了sys.types来回答