mysql查詢數據表中記錄行數及每行空間佔用情況

use information_schema;
select TABLE_ROWS, concat(round(sum(DATA_LENGTH/1024), 2),'KB') as totalSize, concat(round(sum(DATA_LENGTH/1024), 2),'KB')/TABLE_ROWS as recordSize from TABLES where table_schema='databaseName' and table_name='tableName';

說明:

MySQL的 information_schema 數據庫,保存着數據庫的容量和使用信息。可查詢數據庫中每個表佔用的空間、表記錄的行數。

Tables表的結構:

CREATE TEMPORARY TABLE `TABLES` (
  `TABLE_CATALOG` varchar(512) NOT NULL DEFAULT '',
  `TABLE_SCHEMA` varchar(64) NOT NULL DEFAULT '',
  `TABLE_NAME` varchar(64) NOT NULL DEFAULT '',
  `TABLE_TYPE` varchar(64) NOT NULL DEFAULT '',
  `ENGINE` varchar(64) DEFAULT NULL,
  `VERSION` bigint(21) unsigned DEFAULT NULL,
  `ROW_FORMAT` varchar(20) DEFAULT NULL,
  `TABLE_ROWS` bigint(21) unsigned DEFAULT NULL,
  `AVG_ROW_LENGTH` bigint(21) unsigned DEFAULT NULL,
  `DATA_LENGTH` bigint(21) unsigned DEFAULT NULL,
  `MAX_DATA_LENGTH` bigint(21) unsigned DEFAULT NULL,
  `INDEX_LENGTH` bigint(21) unsigned DEFAULT NULL,
  `DATA_FREE` bigint(21) unsigned DEFAULT NULL,
  `AUTO_INCREMENT` bigint(21) unsigned DEFAULT NULL,
  `CREATE_TIME` datetime DEFAULT NULL,
  `UPDATE_TIME` datetime DEFAULT NULL,
  `CHECK_TIME` datetime DEFAULT NULL,
  `TABLE_COLLATION` varchar(32) DEFAULT NULL,
  `CHECKSUM` bigint(21) unsigned DEFAULT NULL,
  `CREATE_OPTIONS` varchar(255) DEFAULT NULL,
  `TABLE_COMMENT` varchar(2048) NOT NULL DEFAULT ''
) ENGINE=MEMORY DEFAULT CHARSET=utf8;

主要字段說明:

TABLE_SCHEMA : 數據庫名
TABLE_NAME:表名
ENGINE:所使用的存儲引擎
TABLE_ROWS:記錄數
DATA_LENGTH:數據大小
INDEX_LENGTH:索引大小

        計算出數據表中每行記錄佔用空間的目的是什麼呢?目的是知道該表在保證查詢性能的前提下,單表能存儲的行記錄的上限。參考博客3中提到一個假設:假設一行記錄的數據大小爲1k,實際上現在很多互聯網業務數據記錄大小通常就是1K左右。在這個假設下得出結論爲單表B+樹索引層級爲3層時,能存儲的行記錄上限爲21,902,400。

        由此可知,一張表在保證查詢性能的前提下,能存儲的記錄行數與每行記錄的大小有關。本人通過對互聯網業務數據進行統計發現,單行記錄數據的大小超過1k的並不太多,單行記錄的平均大小不到0.5k(0.5k左右),也就是說,能存儲的行記錄上限在四千萬~五千萬。

 

參考博客:

1.https://www.jianshu.com/p/8f086c98d591  mysql查詢庫大小,錶行數,索引大小

2.https://www.cnblogs.com/mr-wuxiansheng/p/7520628.html  msyql round函數

3.https://blog.csdn.net/Saintyyu/article/details/100114372  爲什麼MySQL的索引要使用B+樹,而不是其它樹?比如B樹?

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章