是否可以获取数据类型所消耗的内存 SQL服务器?我想以这种方式获得记忆 -
Id, datatypes, base_memory (in bytes), memory_multiplier
1, varchar(x), 2, x
2, int, 2, 1
et cetra.
制作这样的桌子有什么问题吗?
我需要这张桌子,以便我可以用它来查找 一行ANY可以消耗的最大内存 sql server table。
如果没有用于获取我的表的SQL查询,那么 我可以手动创建一个表。但是,是我的桌子 正确的方法?
答案 0 :(得分:1)
如果使用varchar(max),text,image等类型,可能会遇到问题,因为它们可能会占用大量内存 - 但是,您可能想要用作起点的是查看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。但是你会看到类型生命整数将具有空值 - 尽管这些是屈服于你开始的方法的值。
ADDED
另请注意,文本/图像等不计入行大小的8K限制,因此根据您计算路径大小的原因,您可能希望排除。这不包括sql server用于存储行的一些额外数据库开销。
ADDED
像integer这样的固定大小元素将显示为null。您可以使用您开始使用的方法获得正确的大小,或使用等效的case语句获取以字节为单位的列大小。我不记得sql以你想要的格式提供这些数据。
ADDED后来记得
基本类型大小在sys.types中定义 - 不要以为我曾经使用过它,容易忘记。
答案 1 :(得分:0)
函数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
使用AdventureWorks2008R2数据库进行示例测试 -
将查询结果保存到文本文件中。查看文本文件的大小。如果它大约等于我的查询返回的值,那么我认为我们应该这样做 很高兴。
select *
from person.Person
where FirstName = 'crystal'
-- Records = 22
文件:大小= 15.2KB 查询:6116字节
结果 - 对此表无效! :(
测试2 -
表薪水 -
[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字节。
结果 - 取得巨大成功???