

 Amazon Redshift 將不再支援從修補程式 198 開始建立新的 Python UDFs。現有 Python UDF 將繼續正常運作至 2026 年 6 月 30 日。如需詳細資訊，請參閱[部落格文章](https://aws.amazon.com/blogs/big-data/amazon-redshift-python-user-defined-functions-will-reach-end-of-support-after-june-30-2026/)。

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

# 單欄式儲存
<a name="c_columnar_storage_disk_mem_mgmnt"></a>

本節說明單欄式儲存，這是 Amazon Redshift 用來有效率地儲存表格式資料的方法。

資料庫資料表的單欄式儲存方式是實現最佳化分析查詢效能的重要因素，因為其大幅地降低了整體磁碟輸入/輸出需求。這麼做可降低您需要從磁碟載入的資料量。

下列的一系列圖解，說明單欄式資料儲存如何實現效率，進而提升將資料擷取到記憶體時的效率。

第一張圖顯示資料庫資料表的記錄，通常是如何以列的形式儲存到磁碟區塊中。

![\[在磁碟區塊中按列儲存的資料庫資料表記錄。\]](http://docs.aws.amazon.com/zh_tw/redshift/latest/dg/images/03a-Rows-vs-Columns.png)


在典型的關聯式資料庫資料表中，每列會包含單一筆記錄的欄位值。在列式資料庫儲存法中，資料區塊會依順序儲存每個連續資料欄的值，這構成了一個整列。如果區塊的容量小於記錄的大小，則整筆記錄所佔的儲存空間可能會超過一個區塊。如果區塊的容量大於記錄的大小，則整筆記錄所佔的儲存空間可能會少於一個區塊，造成磁碟空間使用上的無效率。在線上交易處理 (OLTP) 應用中，大部分的異動作業牽涉到經常性的讀取和寫入整個記錄的所有值 (一次通常讀取和寫入一筆記錄或少量的幾筆記錄)。因此，OLTP 資料庫採用列式儲存法是最理想的。

下一張圖解顯示，使用單欄式儲存法時，每欄的值如何按順序儲存到磁碟區塊中。

![\[在磁碟區塊中按欄儲存的資料庫資料表記錄。\]](http://docs.aws.amazon.com/zh_tw/redshift/latest/dg/images/03b-Rows-vs-Columns.png)


使用單欄式儲存法時，每個資料區塊會儲存多個資料列單欄的值。當記錄進到系統時，Amazon Redshift 會在不被察覺的狀況下，將各欄的資料轉換為單欄式儲存模式。

在這個簡化的範例中，相較於列式儲存法，使用單欄式儲存法時，每個資料區塊可儲存多達三倍的記錄欄位值。這代表相較於列式儲存法，針對相同數目的記錄讀取相同數量的欄位值時，只需要進行三分之一的輸入/輸出操作。實際上，所使用的資料表如果包含龐大數量的欄數和列數時，單欄式儲存法的儲存效率甚至會更高。

另一個額外的優點是，由於每個區塊都儲存相同類型的資料，因此區塊資料可以採用專為欄資料類型而選擇的壓縮方法，以進一步減少磁碟空間和 I/O。如需根據資料類型決定壓縮編碼方法的詳細資訊，請參閱 [壓縮編碼](c_Compression_encodings.md)。

在磁碟上儲存資料所省下的空間，也可沿用到擷取資料然後將資料儲存到記憶體。由於許多的資料庫操作一次只需存取或操作一個或少量的欄，因此藉由只擷取查詢實際所需的資料欄區塊，可以節省記憶體的空間。OLTP 交易通常會處理少量記錄資料列的大部分欄或所有欄，資料倉儲查詢則通常只會讀取龐大數量資料列的幾個欄。這代表針對相同數目的資料列讀取相同數量的欄位值時，只需要進行部分的輸入/輸出操作。其使用處理資料列區塊時所需的一小部分記憶體。實際上，所使用的資料表如果包含龐大數量的欄數和列數時，欄式儲存法的儲存效率會按比例提高。例如，假設資料表包含 100 個資料欄。使用 5 個資料欄的查詢作業，將只需要讀取資料表中所包含資料的 5%。大型資料庫可能會有數十億或甚至數兆的記錄，都能重複實現這種節省效率。相較之下，列式資料庫也會讀取包含其他 95 個非必要資料欄的資料區塊。

典型的資料庫區塊大小範圍介於 2 KB 到 32 KB 之間。Amazon Redshift 使用效率更高的 1 MB 區塊大小，這在執行任何的資料庫載入作業，或查詢作業執行所包含的其他操作時，可進一步減少所需的 I/O 請求數量。