SQL SERVER 2012 - 获取有关列优化的报告

时间:2016-06-02 08:08:08

标签: sql-server tsql stored-procedures report

我有一个脚本可以提供有关数据库中表格的报告。

我的问题是如何获取有关最未经优化的列的数据?

实施例: 列名,reserveddata,useddata,unoptimised / unusedspace。

代码:

use tempdatabase

create table #getdatav1 (
    [table] varchar(255),
    [rows] int,
    reserved varchar(255),
    data varchar(255),
    index_size varchar(255),
    unused varchar(255))
create table #getdatav2 (
    [servername] varchar(50),
    [basename] varchar(50),
    [table] varchar(255),
    [rows] int,
    reservedKb int,
    dataKb int,
    reservedIndexSize int,
    reservedUnused int)

EXEC sp_MSforeachtable @command1="insert into #getdatav1
EXEC sp_spaceused '?'"
insert into #getdatav2 ([servername], [basename], [table], [rows], reservedKb, dataKb, reservedIndexSize, reservedUnused)
select @@SERVERNAME, DB_NAME(), [table], [rows], 
SUBSTRING(reserved, 0, LEN(reserved)-2), 
SUBSTRING(data, 0, LEN(data)-2), 
SUBSTRING(index_size, 0, LEN(index_size)-2), 
SUBSTRING(unused, 0, LEN(unused)-2)
from #getdatav1

select * from #getdatav2
order by reservedKb desc

1 个答案:

答案 0 :(得分:0)

sp_spaceused仅适用于表格的上下文,如果您正在寻找,则无法针对各个列运行。

您可以光标查看要检查的表中的每一列,并将每个列分别复制到临时表中,该表只包含该列,然后您可以运行sp_spaceused以获取每列的结果。

检查here以获取存储过程的示例,该示例演示了将单个列复制到单独的表然后在其上运行sp_spaceused的概念。您可以将此作为一个起点,然后创建光标以逐步浏览您希望分析的每个表和字段,调用您的sp_spaceused2存储过程(尽管我建议您选择更好,更具描述性的名称)这个!)为每一个和INSERT结果返回到一个表格进行最终显示。