mysql获取数据库表数量和数据库表行数以及表数据量大小
有时候项目优化后需要对数据库数据量进行跟踪,比如某个接口中数据存储量大且请求频繁,如果全量存储接口中数据将会造成数据库数据量过大,此时可以对接口数据进行存储概率设置,这样按照一定的概率存储数据将会大大缓解数据库存储压力,对接口处理进行优化后,为了验证优化成果需要时不时对数据库表数量和表行数以及表数据量大小进行跟踪观察。
- 查询数据库testdata中所有的表数量
SELECT COUNT(*) TABLES, table_schema FROM information_schema.TABLES WHERE table_schema = 'testdata'
结果为:
2.查询数据库testdata中表行数
select table_name,table_rows from information_schema.tables where TABLE_SCHEMA = 'testdata' order by table_rows asc;
上述查询了数据库testdata中所有表的行数,如果要查询特定表比如testcc表的行数呢,有下面二种方法:
方法一:
select count(*) from testcc
方法二:
select table_name,table_rows from information_schema.tables where TABLE_SCHEMA='testdata' and table_name='testcc';
结果为:
有时候会发现上面二种方法得到的值不一样,是因为table_rows不是实时更新的,而count得到的是准确的值,这种情况下执行下面方法后再试一下table_rows值就等于count的值了:
use testdata;
Analyze table testcc;
我看网上还有种说法是:对于存储引擎MyISAM来说,table_rows字段存储的是确切的行数,但是对于其他的一些存储引擎比如InnoDB,这个table_rows值则是估算的不准确的,可能与实际值相差40%至50%,这种情况下得用count(*)来获取到准备的表行数。
我用show variables like'%storage_engine%';查了一下我所使用的这个mysql数据库,发现使用的是InnoDB引擎:
以我这个数据库来说,刚开始查到的testcc表的count和table_rows值是不一样的,后来我执行了Analyze table testcc;后count和table_rows值就一样了,所以上面那个InnoDB中table_rows值是估算的说法我也不清楚是否适用于所有情况,因为我这个mysql是执行了Analyze table testcc;后table_rows值就准确了,并没有与实际值相差40%至50%,有知道的小伙伴可以留言跟我说一声~~
如果要计算testdata数据库中所有表的总行数,可以使用sum来累计:
select sum(table_rows) from information_schema.tables where TABLE_SCHEMA = 'testdata';
3.查询数据库testdata中表数据量大小值
select TABLE_SCHEMA as 'Database', TABLE_NAME as 'TableN', ROUND((DATA_LENGTH+INDEX_LENGTH)/1024/1024,2) AS 'Size(MB)' FROM information_schema.TABLES where TABLE_SCHEMA='testdata' ORDER BY (DATA_LENGTH+INDEX_LENGTH)
查询数据库testdata中所有表的总数据量大小值
select TABLE_SCHEMA as 'Database', SUM(ROUND((DATA_LENGTH+INDEX_LENGTH)/1024/1024,2)) AS 'Size(MB)' FROM information_schema.TABLES where TABLE_SCHEMA='testdata'
本次简单介绍了一下mysql中获取数据库表数量、数据库表行数和表数据量大小的方法,如有异议或疑问可以留言跟我说一下,谢谢~~