如何从特定数据库中检索具有行数的表名?

时间:2011-03-31 09:23:53

标签: mysql ruby-on-rails

如何检索特定数据库的表名和行数?

就像我的数据库名称是xyz。 XYZ数据库我想获取特定表的所有表和记录数。

查询

SELECT status.real_name AS“real_name”,status.friendly_name AS“friendly_name”,table_rows AS“quant_of_rows”,ROUND((data_length + index_length)/ 1024 / 1024,2)AS“total_size_mb”FROM information_schema.TABLES RIGHT JOIN table_status ON status.real_name = information_schema.TABLES.TABLE_NAME WHERE information_schema.TABLES.table_schema ='database_name';

此查询显示4列。

  1. 原始表名称
  2. 友好的表名
  3. 表格记录
  4. 表格大小
  5. 我遇到了第3栏的问题。对于InnoDB表,table_rows只是SQL优化中使用的粗略估计。

    我可以使用类似这样的东西代替table_rows吗?

    (select count(*) from information_schema.TABLES.TABLE_NAME) AS "Quant_of_Rows"
    

    为数据库获取table_row的其他方法是什么?

3 个答案:

答案 0 :(得分:1)

this?之类的东西还是我错过了这一点?

- 皮特

答案 1 :(得分:0)

SHOW TABLE STATUS

并且看"名称"和"行"列

答案 2 :(得分:0)

    @temp_table = []
    ActiveRecord::Base.connection.tables.each do |table|
      count = ActiveRecord::Base.connection.execute("SELECT COUNT(*) as count FROM #{table}").fetch_hash['count']
      size = ActiveRecord::Base.connection.execute("SHOW TABLE STATUS LIKE '#{table}'").fetch_hash
      @temp_table <<  {:table_name => table,
          :records => count.to_i,
          :size_of_table => ((BigDecimal(size['Data_length']) + BigDecimal(size['Index_length']))/1024/1024).round(2)
        }
      end
    end