テーブルスペース—Djangoドキュメント

提供:Dev Guides
< DjangoDjango/docs/3.2.x/topics/db/tablespaces
移動先:案内検索

テーブルスペース

データベースシステムのパフォーマンスを最適化するための一般的なパラダイムは、テーブルスペースを使用してディスクレイアウトを整理することです。

警告

Djangoはテーブルスペースを作成しません。 表領域の作成と管理の詳細については、データベースエンジンのドキュメントを参照してください。


テーブルのテーブルスペースの宣言

モデルのclass Meta内に db_tablespace オプションを指定することにより、モデルによって生成されたテーブルの表領域を指定できます。 このオプションは、モデル内の ManyToManyField 用に自動的に作成されたテーブルにも影響します。

:setting: `DEFAULT_TABLESPACE` 設定を使用して、 db_tablespace のデフォルト値を指定できます。 これは、コードを制御できない組み込みのDjangoアプリやその他のアプリケーションのテーブルスペースを設定する場合に役立ちます。


インデックスのテーブルスペースの宣言

db_tablespace オプションをIndexコンストラクターに渡して、インデックスに使用するテーブルスペースの名前を指定できます。 単一フィールドインデックスの場合、 db_tablespace オプションをFieldコンストラクターに渡して、フィールドの列インデックスの代替テーブルスペースを指定できます。 列にインデックスがない場合、このオプションは無視されます。

:setting: `DEFAULT_INDEX_TABLESPACE` 設定を使用して、 db_tablespace のデフォルト値を指定できます。

db_tablespace が指定されておらず、:setting: `DEFAULT_INDEX_TABLESPACE` を設定していない場合、インデックスはテーブルと同じテーブルスペースに作成されます。


class TablespaceExample(models.Model):
    name = models.CharField(max_length=30, db_index=True, db_tablespace="indexes")
    data = models.CharField(max_length=255, db_index=True)
    shortcut = models.CharField(max_length=7)
    edges = models.ManyToManyField(to="self", db_tablespace="indexes")

    class Meta:
        db_tablespace = "tables"
        indexes = [models.Index(fields=['shortcut'], db_tablespace='other_indexes')]

この例では、TablespaceExampleモデルによって生成されたテーブル(つまり、 モデルテーブルと多対多テーブル)は、tablesテーブルスペースに格納されます。 名前フィールドのインデックスと多対多テーブルのインデックスは、indexesテーブルスペースに格納されます。 dataフィールドもインデックスを生成しますが、そのテーブルスペースが指定されていないため、デフォルトでモデルテーブルスペースtablesに格納されます。 shortcutフィールドのインデックスは、other_indexesテーブルスペースに格納されます。


データベースのサポート

PostgreSQLとOracleはテーブルスペースをサポートしています。 SQLite、MariaDB、MySQLはそうではありません。

表領域のサポートがないバックエンドを使用する場合、Djangoは表領域に関連するすべてのオプションを無視します。