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でもテーブルサイズは確認できます。用途に応じて使い分けるとよいでしょう。
-
MySQLテーブルを一括更新する方法|ADDTIME関数で複数行の時刻データをまとめて変更
MySQLでは、UPDATE文と関数を組み合わせることで、テーブル内の複数のレコードを一度に一括更新(バッチ更新)できます。本記事では、時刻型(TIME型)のカラムに対してADDTIME関数を使い、すべての行の時刻をまとめて加算・更新する手順を、実際のSQL文と実行結果付きでわかりやすく解説します。1. サンプルテーブルを作成するまず、時刻データを格納するためのテーブル「DemoTable」を作成します。mysql> create table DemoTable -> ( -> Bre
-
MySQLでテーブルが存在するかどうかを確認する方法【INFORMATION_SCHEMA.TABLES活用】
MySQLでテーブルの存在を確認するにはMySQLにおいて、特定のテーブルがデータベース内に存在するかどうかを確認したい場合、INFORMATION_SCHEMA.TABLES を利用するのが一般的な方法です。このシステムビューには、サーバー上のすべてのデータベースとテーブルに関するメタデータが格納されており、これを参照することで目的のテーブルが存在するかを簡単に調べられます。基本構文テーブルの存在確認は、以下のようなSELECT文で行います。select table_name from information_schema.tables where table_schema=database