获取数据库表中的列利用率

时间:2018-09-05 04:52:49

标签: mysql database-design

在浏览某些数据库时,我正在考虑适当的数据库设计,这些数据库在150,000条记录中,某些列仅设置了5-20个值。我想到应该将利用率低的列转移到数据透视表,并希望运行一个报告,告诉我要评估哪个。

我尝试了一次foreach,但对我来说不起作用。有提示吗?

foreach('SELECT table_name,
       column_name
FROM   information_schema.columns
WHERE  table_schema = "mydb"', 
'SELECT    ${2}, utilization
FROM      mydb.${1}.${2}
LEFT JOIN
          (
                 SELECT sum(secondary_email)/count(*) AS utilization
                 FROM   (
                               SELECT
                                      CASE
                                             WHEN secondary_email IS NULL THEN 0
                                             ELSE 1
                                      END AS secondary_email
                               FROM   offices ) AS c )
GROUP BY  ${2} ')

1 个答案:

答案 0 :(得分:0)

我希望有一个更好的答案,请随时在这里帮我。将输出复制并粘贴到此处,然后删除最终的UNION ALL

SELECT 
    CONCAT('SELECT ', QUOTE(tb), ', ',QUOTE(col),', sum(`has_value`)/count(*) AS utilization FROM   (SELECT CASE WHEN `',col,'` IS NULL THEN 0 ELSE 1 END AS has_value FROM   ',tb,'  ) AS c UNION ALL') SearchSQL
FROM
(
    SELECT table_schema db,table_name tb,column_name col FROM information_schema.columns
    WHERE table_schema = 'myDB' AND
    (column_type LIKE 'char(%' OR column_type LIKE 'varchar(%' OR column_type LIKE '%text')
) A