[英]Calculate amount of disk space used by results of a T-SQL query
我正在將SQL Server與另一種數據庫技術進行比較,並且為了比較磁盤需求,我想計算僅由SELECT查詢返回的元素使用的磁盤數量,該SELECT查詢通過簡單的WHERE子句在幾個表上進行聯接,而不是用於整個表或數據庫。 這樣一來,我不必麻煩將整個表或數據庫中有價值的數據加載到另一個數據庫中。
我有一個類似以下的查詢,我想這樣做:
SELECT * FROM a
INNER JOIN b ON a.id = b.id
INNER JOIN c ON a.id = c.id
INNER JOIN d ON a.id = d.id1 OR a.id = d.id2
WHERE a.id = 390330
除了如何查找整個表或數據庫使用的磁盤空間外,我還沒有在線找到任何建議。 SQL Server內置有什么可以幫助我的,還是我需要手工計算?
可以通過收集行的大小來計算存儲行的子集所需的存儲量的估計。 盡管對於具有多個聯接的任意查詢而言,以通用方式進行此操作是不可行的,但對於特定於該問題的查詢,您可以構建一個查詢,該查詢將計算該查詢中包括的所有行的大小,如下所示(基於來自https://www.c-sharpcorner.com/blogs/calculate-row-size-of-a-table-in-sqlserver1的代碼):
declare @sql nvarchar(max);
set @sql = '
SELECT COALESCE((
--table a
SELECT SUM(0'
select @sql = @sql + ' + isnull(datalength(' + name + '), 1)'
from sys.columns where object_id = object_id('a')
set @sql = @sql + ')
FROM a
WHERE a.id = 390330
), 0) + COALESCE((
-- table b
SELECT SUM(0'
select @sql = @sql + ' + isnull(datalength(' + name + '), 1)'
from sys.columns where object_id = object_id('b')
set @sql = @sql + ')
FROM b
WHERE b.id = 390330
), 0) + COALESCE((
-- table c
SELECT SUM(0'
select @sql = @sql + ' + isnull(datalength(' + name + '), 1)'
from sys.columns where object_id = object_id('c')
set @sql = @sql + ')
FROM c
WHERE c.id = 390330
), 0) + COALESCE((
-- table d
SELECT SUM(0'
select @sql = @sql + ' + isnull(datalength(' + name + '), 1)'
from sys.columns where object_id = object_id('d')
set @sql = @sql + ')
FROM d
WHERE d.id1 = 390330 OR d.id2 = 390330
), 0);
exec (@sql);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.