我有一个比预期更大的数据库,如何查询它以检索占用更多空间的字段。
假设我只有2张桌子
Table1.FieldOne
Table1.FieldTwo
Table2.FieldOne
Table2.FieldTwo
假设99.9%的数据库数据在Table2.FieldTwo中,我如何查询数据库?
当然我有很多桌子。
db在sqlserver 2000上
答案 0 :(得分:1)
我想不出一个简单方式来做到这一点。
一种方法是动态生成TSQL以列出每个表中每列的总大小,这可以通过以下方式完成:
DECLARE @SQL VARCHAR(MAX)
SELECT @SQL = COALESCE(@SQL + CHAR(10) + 'UNION ALL' + CHAR(10), '') +
'SELECT ''' + QUOTENAME(t.name) + ''' AS TableName, ''' + QUOTENAME(c.name) + ''' AS ColumnName, SUM(DATALENGTH(' + QUOTENAME(c.name) + ')) AS TotalSizeBytes
FROM ' + QUOTENAME(t.name)
FROM sys.columns c
JOIN sys.tables t ON c.object_id = t.object_id
WHERE t.name = 'VoterAccount'
SET @SQL = 'SELECT TableName, ColumnName, TotalSizeBytes FROM (' + @SQL + ') x ORDER BY TotalSizeBytes DESC'
PRINT @SQL -- Just PRINT the SQL out. You can then copy it, and execute manually
将返回例如
TableName ColumnName TotalSizeBytes
Table1 Column1 123456789
Table1 Column3 34356464
Table2 ColumnA 33987987
然而,我担心这可能是一个非常重要的查询,所以我会首先仔细考虑它。如果没有更好的建议并且你尝试这个,那么可能值得限制它只查看列的子集 - 即忽略你从一开始就知道的任何列都很小,专注于你知道可能的列是更大的。
理想的解决方案是,如果这些信息已经存储在系统表中/可以通过DMV以某种方式访问 - 不幸的是我不知道是否存在,如果可用,我从未遇到过它。