Mysql データベースにPerson
は、 というキーを持つテーブルがありますFirstName
。
10000件のエントリがあると、またはなどの一般的なFirstNames
人々の繰り返しがある場合があります。John
Bob
テーブルを編集しPerson
て繰り返しを1 回だけ保存し、メモリ空間を利用してデータをより効率的に保存できるようにするにはどうすればよいですか?
Mysql データベースにPerson
は、 というキーを持つテーブルがありますFirstName
。
10000件のエントリがあると、またはなどの一般的なFirstNames
人々の繰り返しがある場合があります。John
Bob
テーブルを編集しPerson
て繰り返しを1 回だけ保存し、メモリ空間を利用してデータをより効率的に保存できるようにするにはどうすればよいですか?
あなたは、私がマイクロ最適化として分類する極端な形式の正規化を探しています。私が知っているほとんどのデータベースはそこまで進んでいませんが、結局のところそうではないのです。
firstname
これは、データベース内のすべての既知の名前を保持するテーブルを作成することで簡単に実現できます。firstname
次に、メイン テーブルの列を、このテーブルへの外部キー参照 (通常は 4 バイト) に置き換えますINT
。
firstname
このアプローチの問題は、次のようなインデックスも作成することです。
CREATE TABLE fistnames (
id INT PRIMARY KEY,
firstname VARCHAR(250)
) ;
このテーブルのフットプリントは、4 (firstnames.id
列) + [長さfirstname
] + [主キー インデックス エントリのサイズ] になります。また、メイン テーブルの外部キー用にさらに 4 バイトを追加します。これは、特に「Joe」などの短い名前の場合、現在の構造よりもストレージに関して効率が悪い可能性があります。
key on の代わりに、FirstName
id をキーにする必要があります。また、列からキーを削除しFirstName
ます。
の観点から考える必要がありますmemory versus functionality and speed
。列にキーを付けてメモリを節約したい場合はFirstName
、複数の人が同じ名前を持つという機能を犠牲にする必要があります。
id
テーブルに主キーを持つ列を追加する必要がありperson
ます。
ご要望に応じて、個人テーブルのテンプレートを差し上げます
CREATE TABLE persons
(id int auto_increment primary key,
FirstName varchar(40),
LastName varchar(40),
details varchar(100),
...any other columns
)
id
前にフィールドがない場合は、使用します
ALTER TABLE persons ADD id int auto_increment primary key;