テーブル空間(tablespace)¶
データベースシステムのパフォーマンスを最適化するための一般的なパラダイムは、ディスクレイアウトを整理するためにテーブル空間 tablespaces を使用することです。
警告
Django はテーブル空間を作成しません。テーブル空間の作成と管理の詳細は、データベースエンジンのドキュメントを参照してください。
テーブルにテーブル空間を宣言する¶
モデルによって生成されるテーブルにテーブル空間を指定するには、モデルの class Meta
内で db_tablespace
オプションを指定します。このオプションはモデルの ManyToManyField
に対して自動的に生成されるテーブルにも影響します。
DEFAULT_TABLESPACE
設定を使うと、 db_tablespace
のデフォルト値を指定できます。これは、組み込みの Django アプリケーションや、自分でコードを制御できないアプリケーションのテーブル空間を設定するのに便利です。
インデックスにテーブル空間を宣言する¶
db_tablespace
オプションを Index
コンストラクタに渡すことで、インデックスに使用するテーブル空間の名前を指定できます。単一フィールドインデックスの場合、 db_tablespace
オプションを Field
コンストラクタに渡すことで、フィールドのカラムインデックスに使用するテーブル空間を指定できます。カラムにインデックスがない場合、このオプションは無視されます。
DEFAULT_INDEX_TABLESPACE
設定を使って db_tablespace
のデフォルト値を指定できます。
db_tablespace
が指定されておらず、 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
テーブル空間に格納されます。name フィールドのインデックスと多対多テーブルのインデックスは indexes
テーブル空間に格納されます。 data
フィールドもインデックスを生成しますが、テーブル空間が指定されていないため、デフォルトではモデルのテーブル空間 tables
に格納されます。 shortcut
フィールドのインデックスは other_indexes
テーブル空間に格納されます。
データベースのサポート¶
PostgreSQLとOracleはテーブル空間をサポートしています。SQLite、MariaDB、MySQLはサポートしていません。
テーブル空間をサポートしていないバックエンドを使う場合、 Django はテーブル空間関連のオプションを全て無視します。