Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/74.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何获得SQL server中所有数据类型所消耗的最大内存?_Sql_Sql Server_Sql Server 2008_Sql Server 2005 - Fatal编程技术网

如何获得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查询,则 我可以为它手动创建一个表。但是,这是我的桌

是否可以获取中的数据类型所消耗的内存 SQL server?我想以这种方式获得记忆-

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来回答