MySQL
 Computer >> コンピューター >  >> プログラミング >> MySQL

MySQLでテーブルの現在のサイズ(メモリ上)を確認する方法

MySQLでテーブルの現在のサイズ(ディスクやメモリ上での占有容量)を調べたい場合、「SHOW TABLE STATUS」ステートメントを使用すると、テーブル名、ストレージエンジン、行数、データ長など、テーブルに関する詳細情報を一度に確認できます。

テーブルサイズを確認する基本のコマンド

特定のテーブルの現在のサイズを取得するには、以下のようにコマンドを実行します。「yourTableName」の部分を実際のテーブル名に置き換えてください。

show table status like 'yourTableName'\G

「\G」を付けることで、結果が縦方向に整形されて表示され、多くの項目が出力される場合でも読みやすくなります。

サンプルテーブルの作成

まずは動作確認用に、サンプルテーブルを作成してみましょう。

mysql> create table DemoTable
    -> (
    -> Id int NOT NULL AUTO_INCREMENT PRIMARY KEY,
    -> CustomerName varchar(20),
    -> CustomerAge int,
    -> CustomerCountryName varchar(20)
    -> );
Query OK, 0 rows affected (0.75 sec)

Idカラムを主キー(PRIMARY KEY)としてAUTO_INCREMENTを設定し、顧客名・年齢・国名を格納するシンプルな構造のテーブルです。

レコードの挿入

続いて、INSERTコマンドを使ってテーブルにレコードを追加します。

mysql> insert into DemoTable(CustomerName,CustomerAge,CustomerCountryName) values('John',24,'US');
Query OK, 1 row affected (0.23 sec)

mysql> insert into DemoTable(CustomerName,CustomerAge,CustomerCountryName) values('Carol',22,'UK');
Query OK, 1 row affected (0.14 sec)

登録データの確認

SELECT文ですべてのレコードを表示して、正しく挿入されているか確認しましょう。

mysql> select *from DemoTable;

出力結果

+----+--------------+-------------+---------------------+
| Id | CustomerName | CustomerAge | CustomerCountryName |
+----+--------------+-------------+---------------------+
| 1  | John         | 24          | US                  |
| 2  | Carol        | 22          | UK                  |
+----+--------------+-------------+---------------------+
2 rows in set (0.00 sec)

テーブルの現在のサイズを確認するクエリ

それでは、本題である「DemoTable」の現在のサイズ(メモリ上)を確認するクエリを実行します。

mysql> show table status like 'DemoTable'\G

出力結果

*************************** 1. row ***************************
Name: DemoTable
Engine: InnoDB
Version: 10
Row_format: Dynamic
Rows: 0
Avg_row_length: 0
Data_length: 16384
Max_data_length: 0
Index_length: 0
Data_free: 0
Auto_increment: NULL
Create_time: 2019-06-10 16:35:55
Update_time: NULL
Check_time: NULL
Collation: utf8_unicode_ci
Checksum: NULL
Create_options:
Comment:
1 row in set (0.01 sec)

出力結果の見方

表示された項目の中で、テーブルサイズに関わる主なものは以下の通りです。

  • Data_length: データ部分が占めるサイズ(バイト単位)。この例では16384バイト=16KBです。
  • Index_length: インデックスが占めるサイズ(バイト単位)。
  • Data_free: 削除済みレコードなどによって空きとなっている領域のサイズ。
  • Rows / Avg_row_length: おおよその行数と、1行あたりの平均サイズ。

なお、InnoDBの場合、「Rows」や「Avg_row_length」は統計情報に基づく概算値であり、正確な値とは限らない点に注意してください。トランザクション分離の仕組み上、行数は即座には反映されないことがあります。

補足:information_schemaを使った方法

より柔軟にサイズを取得したい場合は、information_schema.TABLESテーブルを参照する方法もあります。単位を換算して見やすく表示できるのが利点です。

SELECT table_name,
       data_length/1024/1024 AS data_mb,
       index_length/1024/1024 AS index_mb
FROM information_schema.tables
WHERE table_schema = 'yourDatabaseName'
  AND table_name = 'DemoTable';

このように、SHOW TABLE STATUSでもinformation_schemaでもテーブルサイズは確認できます。用途に応じて使い分けるとよいでしょう。

  1. MySQLテーブルを一括更新する方法|ADDTIME関数で複数行の時刻データをまとめて変更

    MySQLでは、UPDATE文と関数を組み合わせることで、テーブル内の複数のレコードを一度に一括更新(バッチ更新)できます。本記事では、時刻型(TIME型)のカラムに対してADDTIME関数を使い、すべての行の時刻をまとめて加算・更新する手順を、実際のSQL文と実行結果付きでわかりやすく解説します。1. サンプルテーブルを作成するまず、時刻データを格納するためのテーブル「DemoTable」を作成します。mysql> create table DemoTable    -> (    -> Bre

  2. MySQLでテーブルが存在するかどうかを確認する方法【INFORMATION_SCHEMA.TABLES活用】

    MySQLでテーブルの存在を確認するにはMySQLにおいて、特定のテーブルがデータベース内に存在するかどうかを確認したい場合、INFORMATION_SCHEMA.TABLES を利用するのが一般的な方法です。このシステムビューには、サーバー上のすべてのデータベースとテーブルに関するメタデータが格納されており、これを参照することで目的のテーブルが存在するかを簡単に調べられます。基本構文テーブルの存在確認は、以下のようなSELECT文で行います。select table_name from information_schema.tables where table_schema=database