コラムファミリー
列ファミリは、基になるキーと値のストアに単一のキーと値のペアとして格納されているテーブル内の列のグループです。 列ファミリは、キーと値のストアに格納されているキーの数を減らし、INSERT
、UPDATE
、およびDELETE
操作中のパフォーマンスが向上します。
このページでは、CockroachDBが列をファミリに整理する方法と、デフォルトの動作を手動でオーバーライドする場合について説明します。
セカンダリインデックスは、テーブルに適用される列ファミリ定義を尊重します。 セカンダリインデックスを定義すると、CockroachDBは、ファミリーと格納された列の構成に従って、セカンダリインデックスのキーと値のペアを列ファミリに分割
デフォルトの動作
テーブルが作成されると、すべての列が単一の列ファミリとして格納されます。
このデフォルトのアプローチは、ほとんどの場合、効率的なキー値の格納とパフォーマンスを保証します。 ただし、頻繁に更新される列がほとんど更新されない列でグループ化されている場合、ほとんど更新されない列は更新ごとに書き直されます。 特に、ほとんど更新されない列が大きい場合は、それらを別個のファミリに分割する方がパフォーマンスが高くなります。
手動オーバーライド
テーブル作成時に列ファミリを割り当てる
テーブル作成時に列ファミリを手動で割り当てるには、FAMILY
キーワードを使用します。
たとえば、最後にアクセスされたタイムスタンプ(last_accessed TIMESTAMP
)を持つ不変のデータblob(data BYTES
)を格納するテーブルを作成したいとします。 データのblobは決して更新されないことがわかっているため、FAMILY
キーワードを使用して別の列ファミリに分割します。
> CREATE TABLE test ( id INT PRIMARY KEY, last_accessed TIMESTAMP, data BYTES, FAMILY f1 (id, last_accessed), FAMILY f2 (data));
> SHOW CREATE test;
列を追加するときの列ファミリの割り当て
ALTER TABLE .. ADD COLUMN
ステートメントを使用してテーブルに列を追加する場合、その列を新規または既存の列ファミリに割り当
- 新しい列を新しいファミリに割り当てるには、
CREATE FAMILY
キーワードを使用します。 たとえば、次の例では、上のtest
テーブルにdata2 BYTES
列を追加し、新しい列ファミリに割り当てます:
> ALTER TABLE test ADD COLUMN data2 BYTES CREATE FAMILY f3;
- 既存のファミリに新しい列を割り当てるには、
FAMILY
キーワードを使用します。 たとえば、次の例では、上記のtest
テーブルにname STRING
列を追加し、それをfamilyに割り当てますf1
:
> ALTER TABLE test ADD COLUMN name STRING FAMILY f1;
CREATE IF NOT EXISTS FAMILY
キーワードを使用して、既存のファミリに新しい列を割り当てるか、ファミリが存在しない場合は新しいファミリに新しい列を割り当てます。 たとえば、次の例では、既存のf1
ファミリに新しい列を割り当てます。:
> ALTER TABLE test ADD COLUMN name STRING CREATE IF NOT EXISTS FAMILY f1;
- 列がテーブルに追加され、ファミリが指定されていない場合は、最初の列ファミリに追加されます。 たとえば、次の例では、最初の列ファミリであるため、新しい列を
f1
ファミリに追加します:
> ALTER TABLE test ADD COLUMN last_name STRING;
も参照してください
CREATE TABLE
ADD COLUMN
- その他のSQL文
このページは役に立ちましたか?
はいいいえ