何千ものレコードを含むテーブルがあり、それぞれに「Region」フィールドがあり、「North America」、「South America」、「Asia」などの 6 つの値のうちの 1 つしか持てません。別のテーブル「地域」を作成し、元の DB の地域フィールドを新しいテーブルに外部キーとして指定すると、DB は減少しますか?
質問する
268 次
2 に答える
2
地域文字列は 1 文字あたり 1 バイトで保存されますが、小さな数字は 1 バイトで保存できます。したがって、データベースのサイズは実際に減少します。
(保存される理論上のバイト数は で決定できますがSELECT SUM(LENGTH(Region) - 1) FROM MyTable
、ページをレコードに分割し、領域テーブルを格納するために必要な追加ページにより、それが減少します。)
于 2013-08-10T08:15:36.050 に答える
1
最後に答えを見つけました。私の元のテーブル:
CREATE TABLE MyTable(Region TEXT, Country TEXT, City TEXT, etc);
サイズを小さくする最初の試み(うまくいきませんでした):
CREATE TABLE Regions(Region TEXT);
CREATE TABLE MyTable(Region TEXT, Country TEXT, City TEXT, FOREIGN KEY (Region) references Regions(Region));
実際に機能した新しいスキーマ:
CREATE TABLE Regions(ID INTEGER PRIMARY KEY AUTOINCREMENT, Region TEXT);
CREATE TABLE MyTable(RegionId INTEGER, Country TEXT, City TEXT, FOREIGN KEY (RegionId) REFERENCES Regions(ID));
Region の整数値を保存すると、データベースのサイズが大幅に減少しました。
于 2013-11-18T01:24:37.073 に答える