Mostly 編碼 - Amazon Redshift

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

Mostly 編碼

當資料欄的資料類型大於大部份存放值所需的資料類型時,Mostly 編碼很有用。您可以對此類型的資料欄指定 mostly 編碼,將資料欄中的大部分值壓縮為更小的標準儲存空間大小。剩下無法壓縮的值會以其原始格式存放。例如,您可以將 16 位元資料欄 (例如 INT2 資料欄) 壓縮為 8 位元儲存空間。

通常,mostly 編碼會使用下列資料類型:

  • SMALLINT/INT2 (16 位元)

  • INTEGER/INT (32 位元)

  • BIGINT/INT8 (64 位元)

  • DECIMAL/NUMERIC (64 位元)

選擇 mostly 編碼的適當變異來符合資料欄之資料類型的大小。例如,將 MOSTLY8 套用至定義為 16 位元整數資料欄的資料欄。不允許將 MOSTLY16 套用至具有 16 位元資料類型的資料欄,也不允許將 MOSTLY32 套用至具有 32 位元資料類型的資料欄。

當資料欄中有相當多的值無法壓縮時,Mostly 編碼可能比無壓縮更沒效率。在將其中一種編碼套用到資料欄之前,請執行檢查。您現在將載入的大部分值 (也可能在未來載入) 應納入下表中顯示的範圍。

編碼 壓縮儲存空間大小 可以壓縮的值範圍 (範圍外的值會以原始形式存放)
MOSTLY8 1 位元組 (8 位元) -128 到 127
MOSTLY16 2 位元組 (16 位元) -32768 到 32767
MOSTLY32 4 位元組 (32 位元) -2147483648 到 +2147483647
注意

對於小數,忽略小數點以判斷值是否納入範圍。例如,1,234.56 會視為 123,456,且可在 MOSTLY32 資料欄中壓縮。

例如,VENUE 資料表中的 VENUEID 資料欄會定義為原始整數資料欄,這表示其值佔用 4 位元組的儲存空間。不過,此欄的值目前範圍是 0309。因此,針對 VENUEID 使用 MOSTLY16 編碼來重建和重新載入此資料表,會將該資料欄中每個值的儲存空間減少至 2 個位元組。

如果另一個資料表中參考的 VENUEID 值大部分在範圍 0 到 127,則將該外部索引鍵資料欄編碼為 MOSTLY8 可能就有意義。在做出選擇之前,請針對參考資料表資料執行數個查詢,以了解值是否大部分都落入 8 位元、16 位元或 32 位元範圍。

下表顯示在使用 MOSTLY8、MOSTLY16 和 MOSTLY32 編碼時特定數值的壓縮大小:

原始值 原始 INT 或 BIGINT 大小 (位元組) MOSTLY8 壓縮大小 (位元組) MOSTLY16 壓縮大小 (位元組) MOSTLY32 壓縮大小 (位元組)
1 4 1 2 4
10 4 1 2 4
100 4 1 2 4
1000 4 與原始資料大小相同 2 4
10000 4 2 4
20000 4 2 4
40000 8 與原始資料大小相同 4
100000 8 4
2000000000 8 4