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

MySQLでテーブルのディスク使用量を確認する方法|information_schema.tablesの使い方

MySQLでテーブルのディスク使用量は照会できる?

はい、可能です。MySQLでは、システムビューである information_schema.tables を参照することで、テーブルが使用しているディスク容量を確認できます。基本的な構文は以下のとおりです。

SELECT * FROM information_schema.tables
WHERE table_name = 'テーブル名';

ここからは、実際にサンプルテーブルを作成し、ディスク使用量を照会するまでの手順を順番に見ていきましょう。

手順1:検証用テーブルを作成する

まず、サンプルとなるテーブルを作成します。

mysql> CREATE TABLE DemoTable1600 (
    ->   StudentId INT,
    ->   StudentFirstName VARCHAR(20)
    -> );
Query OK, 0 rows affected (0.51 sec)

手順2:レコードを挿入する

INSERT文を使って、テーブルにいくつかのレコードを追加します。

mysql> INSERT INTO DemoTable1600 VALUES(100, 'Bob');
Query OK, 1 row affected (0.14 sec)
mysql> INSERT INTO DemoTable1600 VALUES(101, 'David');
Query OK, 1 row affected (0.17 sec)
mysql> INSERT INTO DemoTable1600 VALUES(102, 'Carol');
Query OK, 1 row affected (0.19 sec)

手順3:テーブルの内容を確認する

SELECT文で、テーブル内のすべてのレコードを表示します。

mysql> SELECT * FROM DemoTable1600;

実行結果は以下のとおりです。

+-----------+------------------+
| StudentId | StudentFirstName |
+-----------+------------------+
|       100 | Bob              |
|       101 | David            |
|       102 | Carol            |
+-----------+------------------+
3 rows in set (0.00 sec)

手順4:ディスク使用量を照会する

information_schema.tables を参照して、テーブルが占有しているディスク容量を取得します。

mysql> SELECT * FROM information_schema.tables
    -> WHERE table_name = 'DemoTable1600';

このクエリを実行すると、以下のような結果が得られます(表示の都合上、主要なカラムのみ抜粋しています)。

+---------------+--------+------------+-------------+--------------+
| TABLE_NAME    | ENGINE | TABLE_ROWS | DATA_LENGTH | INDEX_LENGTH |
+---------------+--------+------------+-------------+--------------+
| demotable1600 | InnoDB |          0 |       16384 |            0 |
+---------------+--------+------------+-------------+--------------+
1 row in set (0.00 sec)

実際の結果には、このほかにも TABLE_CATALOG、TABLE_SCHEMA、ROW_FORMAT、AVG_ROW_LENGTH、DATA_FREE、CREATE_TIME、TABLE_COLLATION など、テーブルに関する詳細なメタデータが多数含まれています。

結果に含まれる主なカラムの意味

  • DATA_LENGTH:データ領域が使用している容量(バイト単位)
  • INDEX_LENGTH:インデックスが使用している容量(バイト単位)
  • TABLE_ROWS:テーブル内の推定行数
  • AVG_ROW_LENGTH:1行あたりの平均データ長(バイト単位)
  • DATA_FREE:割り当て済みだが未使用の領域

上記の例では DATA_LENGTH が 16384 バイト(16KB)となっています。これは InnoDB の最小ページサイズ(16KB)に相当する値で、テーブルの実使用量は「DATA_LENGTH + INDEX_LENGTH」で概算できます。

容量をMB単位で見やすく表示する

バイト数のままでは読みにくいため、MB単位に変換して表示すると便利です。

mysql> SELECT table_name,
    ->        ROUND((data_length + index_length) / 1024 / 1024, 2) AS size_mb
    -> FROM information_schema.tables
    -> WHERE table_schema = 'web';

注意点:行単位・列単位の正確な使用量は取得できない

information_schema.tables で確認できるのはテーブル単位のディスク使用量です。MySQLでは、特定の「行」や「列」が正確にどれだけのディスク容量を使用しているかを直接照会することはできません。行単位の概算が必要な場合は、「AVG_ROW_LENGTH × TABLE_ROWS」で計算するか、LENGTH() 関数などで実際のデータ長を測定して推定する方法が現実的です。

  1. 【MySQL】1つのクエリで複数の行を取得する方法:LIKE演算子の活用

    はじめに1つのMySQLクエリで複数の行(レコード)を取得したい場合には、LIKE演算子を使用します。LIKE演算子によるパターンマッチングを活用すれば、条件に合致する複数の行を一度のクエリで効率的に抽出できます。ここでは、まずサンプル用のテーブルを作成しましょう。mysql> create table DemoTable1385 -> ( -> Id int NOT NULL AUTO_INCREMENT PRIMARY KEY, -> Name varchar(20) -> );Query OK, 0 rows affected (0.

  2. MySQLで行の一意性を保証する方法|UNIQUE制約の使い方を解説

    MySQLでテーブル内の行が重複しないようにするには、UNIQUE制約(一意制約)を使用します。UNIQUEインデックスを設定すると、指定したカラムの組み合わせが完全に一致する行の挿入が拒否され、データの整合性を保つことができます。サンプルテーブルの作成まず、動作確認用のテーブルを作成しましょう。mysql> create table DemoTable1580 -> ( -> id int, -> Name varchar(20), -> Age int -> );Query OK, 0 rows affected (0.73