kolumnfamiljer
en kolumnfamilj är en grupp kolumner i en tabell som lagras som ett enda nyckelvärdespar i det underliggande nyckelvärdelagret. Kolumnfamiljer minskar antalet nycklar som lagras i nyckelvärdesbutiken, vilket resulterar i förbättrad prestanda under INSERT
, UPDATE
och DELETE
operationer.
den här sidan förklarar hur CockroachDB organiserar kolumner i familjer samt fall där du kanske vill manuellt åsidosätta standardbeteendet.
sekundära index respekterar kolumnfamiljdefinitionerna som tillämpas på tabeller. När du definierar ett sekundärt index bryter CockroachDB de sekundära indexnyckelvärdesparen i kolumnfamiljer, enligt familjen och lagrade kolumnkonfigurationer.
standardbeteende
när en tabell skapas lagras alla kolumner som en enda kolumnfamilj.
denna standardmetod säkerställer effektiv lagring av nyckelvärde och prestanda i de flesta fall. Men när ofta uppdaterade kolumner grupperas med sällan uppdaterade kolumner skrivs de sällan uppdaterade kolumnerna ändå om varje uppdatering. Speciellt när de sällan uppdaterade kolumnerna är stora är det mer performant att dela dem i en distinkt familj.
Manuell åsidosättning
tilldela kolumnfamiljer vid skapande av bord
för att manuellt tilldela en kolumnfamilj vid skapande av bord, använd nyckelordet FAMILY
.
till exempel, låt oss säga att vi vill skapa en tabell för att lagra en oföränderlig klump av data (data BYTES
) med en Senast åtkomlig tidsstämpel (last_accessed TIMESTAMP
). Eftersom vi vet att blob av data aldrig kommer att uppdateras, använder vi nyckelordet FAMILY
för att bryta den i en separat kolumnfamilj:
> CREATE TABLE test ( id INT PRIMARY KEY, last_accessed TIMESTAMP, data BYTES, FAMILY f1 (id, last_accessed), FAMILY f2 (data));
> SHOW CREATE test;
tilldela kolumnfamiljer när du lägger till kolumner
när du använder ALTER TABLE .. ADD COLUMN
– satsen för att lägga till en kolumn i en tabell kan du tilldela kolumnen till en ny eller befintlig kolumnfamilj.
- använd nyckelordet
CREATE FAMILY
för att tilldela en ny kolumn till en ny familj. Till exempel skulle följande lägga till endata2 BYTES
kolumn tilltest
tabellen ovan och tilldela den till en ny kolumnfamilj:
> ALTER TABLE test ADD COLUMN data2 BYTES CREATE FAMILY f3;
- använd nyckelordet
FAMILY
för att tilldela en ny kolumn till en befintlig familj. Till exempel skulle följande lägga till enname STRING
kolumn tilltest
tabellen ovan och tilldela den till familjenf1
:
> ALTER TABLE test ADD COLUMN name STRING FAMILY f1;
- använd nyckelordet
CREATE IF NOT EXISTS FAMILY
för att tilldela en ny kolumn till en befintlig familj eller, om familjen inte finns, till en ny familj. Till exempel skulle följande tilldela den nya kolumnen till den befintligaf1
– familjen; om den familjen inte existerade skulle den skapa en ny familj och tilldela kolumnen till den:
> ALTER TABLE test ADD COLUMN name STRING CREATE IF NOT EXISTS FAMILY f1;
- om en kolumn läggs till i en tabell och familjen inte anges läggs den till i den första kolumnfamiljen. Till exempel skulle följande lägga till den nya kolumnen till familjen
f1
, eftersom det är den första kolumnfamiljen:
> ALTER TABLE test ADD COLUMN last_name STRING;
Se även
CREATE TABLE
ADD COLUMN
- andra SQL-satser
var den här sidan till hjälp?
Ja Nej