5.6. 制限事項 — Mroonga vmrn_version documentation

本文へスキップ
`Ctrl`+`K`

# 5.6. 制限事項

Mroongaストレージエンジンにはいくつか制限があります。

## 5.6.1. テーブルの制限事項

テーブルには以下の制限があります。この制限はGroongaに由来します。

- 1つのキーの最大サイズ：4KiB

- キーのサイズを合計した上限値：4GiB

- 最大レコード数：

  - プライマリーキーがないテーブル：1,073,741,815 (2 30 - 9)

  - `PRIMARY KEY` または `PRIMARY KEY USING BTREE` を指定したテーブル：1,073,741,823 (2 30 - 1)

  - `PRIMARY KEY USING HASH` を指定したテーブル：536,870,912 (2 29)

実際には他の諸条件の制約により上記の値まで到達しない場合もあります。

## 5.6.2. インデックスの制限事項

1つのインデックスにおける論理上の上限値は以下のとおりです。テーブルごとに適用されるgroonga由来の制限です。

- 最大語彙数: 268,435,455 (約2億6千万)

- 最大インデックスサイズ: 256GiB

実際には他の諸条件の制約により上記の値まで到達しない場合もあります。

テーブルがこの制限に該当するかは `SHOW TABLE STATUS` や `SHOW INDEX FROM ...` などで確認してください。

## 5.6.3. プライマリーキーに関する制限事項

プライマリーキーに空データ（0バイトのデータ）は使用できません。

## 5.6.4. カラムの値に関する制限事項

ストレージモードにおいて、カラムの値には制限があります。

MroongaストレージエンジンはNULL値を自動的に補正します。

例えば、 `DATE` 型や `DATETIME` 型に指定されたNULL値はMroongaストレージエンジンが日や月の値として0を1へと自動的に補正します。

つまり、0月は1月へ、0日は1日として扱います。

そして、NULL値はUNIX時間の0秒 (1970-01-01)として扱います。

このような自動変換は `DATE` 型や `DATETIME` 型に限定されません。

NULL値はカラムのデフォルト値へと変換されます。多くの場合、文字列型であれば空文字列へ、数値型であれば0へと変換されます。

上記挙動を示す例はこちらです。

     1CREATE TABLE date_limitation (
     2  id INT PRIMARY KEY AUTO_INCREMENT,
     3  input varchar(32) DEFAULT NULL,
     4  date DATE DEFAULT NULL
     5) ENGINE=mroonga DEFAULT CHARSET=UTF8;
     6CREATE TABLE datetime_limitation (
     7  id INT PRIMARY KEY AUTO_INCREMENT,
     8  input varchar(32) DEFAULT NULL,
     9  datetime DATETIME DEFAULT NULL
    10) ENGINE=mroonga DEFAULT CHARSET=UTF8;
    11
    12-- Test data for date_limitation
    13INSERT INTO date_limitation (input) VALUES ("NULL");
    14INSERT INTO date_limitation (input, date) VALUES ("1970-00-00", "1970-00-00");
    15
    16-- Test data for datetime_limitation
    17INSERT INTO datetime_limitation (input) VALUES ("NULL");
    18INSERT INTO datetime_limitation (input, datetime) VALUES ("1970-00-00 00:00:00", "1970-00-00 00:00:00");

実行結果はこちらです。:

    mysql> select * from date_limitation;
    +----+------------+------------+
    | id | input      | date       |
    +----+------------+------------+
    |  1 | NULL       | 1970-01-01 |
    |  2 | 1970-00-00 | 1970-01-01 |
    +----+------------+------------+
    2 rows in set (0.00 sec)

    mysql> select * from datetime_limitation;
    +----+---------------------+---------------------+
    | id | input               | datetime            |
    +----+---------------------+---------------------+
    |  1 | NULL                | 1970-01-01 00:00:00 |
    |  2 | 1970-00-00 00:00:00 | 1970-01-01 00:00:00 |
    +----+---------------------+---------------------+
    2 rows in set (0.00 sec)

## 5.6.5. カラムサイズの制限事項

1つのカラムにつき、次の制限があります。

- カラムに格納した値の合計サイズの上限値: 256GiB