mysqlクエリーデータテーブルに記録されたロー数とローあたりの空き容量

2407 ワード

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データベースは、データベースの容量と使用情報を保存しています.データベース内の各テーブルに使用されるスペース、テーブルレコードのロー数をクエリーできます.
Tableの構造:
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では、1行に記録されたデータサイズが1 kであると仮定し、実際には現在多くのインターネット業務のデータ記録サイズが通常1 K程度であると仮定している.この仮定では,単一テーブルB+ツリーインデックスレベルが3層の場合,格納可能な行レコードの上限は21902400であると結論した.
このことから,1枚のテーブルがクエリ性能を保証する前提で格納できるレコード行数は,1行あたりのレコードの大きさに関係することが分かる.本人がインターネット業務データを統計したところ、単行記録データの大きさが1 kを超えるものは多くなく、単行記録の平均サイズは0.5 k(0.5 k程度)未満、つまり、格納できる行記録の上限は4千万~5千万であることが分かった.
 
参考ブログ:
1.https://www.jianshu.com/p/8f086c98d591mysqlクエリーライブラリサイズ、テーブル行数、インデックスサイズ
2.https://www.cnblogs.com/mr-wuxiansheng/p/7520628.htmlmsyql round関数
3.https://blog.csdn.net/Saintyyu/article/details/100114372なぜMySQLのインデックスは他のツリーではなくB+ツリーを使用するのですか?例えばBツリー?