我有一个非常大的表,大约有2亿多条记录,有数百列。我想在每列中获取每个值的计数(大多数列包含2到15个不同的值),甚至可能按状态分解(表中有一个状态字段)。我知道如何获取值的计数,但我正在寻找最不可能完全杀死服务器的最有效方法。我在服务器上有其他数据库,我不想影响太多。有什么想法吗?
答案 0 :(得分:0)
你可以尝试这样做:
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;
答案 1 :(得分:0)
由于您引用的大多数列可能未编入索引,因此任何查询运行都可能消耗相当多的资源。
我建议你尝试一下
select state,'colname',colname,count(*) as cnt
from tablename
group by state,colname
' colname的'是一个静态名称,代表您要报告的列。
对您要处理的每个列重复此过程。