Sql 如何从一个非常大的表中的每列中获取每个值的计数?

Sql 如何从一个非常大的表中的每列中获取每个值的计数?,sql,sql-server,Sql,Sql Server,我有一个非常大的表,大约有2亿多条记录,有数百列。我想获得每列中每个值的计数(大多数列包含2到15个不同的值),甚至可能按状态细分(表中有一个状态字段)。我知道如何获得值的计数,但我正在寻找最有效的方法,最不可能完全杀死服务器。我不想对服务器上的其他数据库造成太大影响。有什么想法吗?你可以试着做这样的事情: select col, val, count(*) from t cross apply (values ('col1', col1), ('col2', col2), . . .

我有一个非常大的表,大约有2亿多条记录,有数百列。我想获得每列中每个值的计数(大多数列包含2到15个不同的值),甚至可能按状态细分(表中有一个状态字段)。我知道如何获得值的计数,但我正在寻找最有效的方法,最不可能完全杀死服务器。我不想对服务器上的其他数据库造成太大影响。有什么想法吗?

你可以试着做这样的事情:

select col, val, count(*)
from t cross apply
     (values ('col1', col1), ('col2', col2), . . . ) v(col, val)
group by col, val
order by col, count(*) desc;

由于您引用的大多数列可能没有索引,因此任何查询运行都可能会消耗大量资源

我建议你尝试一下类似的方法

select state,'colname',colname,count(*) as cnt 
from tablename
group by state,colname
“colname”是一个静态名称,表示要报告的列

对要处理的每个列重复此过程