In this lesson, you will learn how to structure your dimensional tables to maximize the performance benefits of columnar storage systems.
Why Columnar Storage Matters
In traditional row-based databases, when you run a query, the system reads every column in a row, even if you only need one or two pieces of information. Columnar storage, used in most modern cloud data warehouses, stores data column-by-column rather than row-by-row. This means if you only need to calculate the total_revenue, the system only reads the total_revenue column, ignoring everything else.
Designing for Compression and Retrieval
Because columnar storage groups identical data types together, it becomes incredibly efficient at compression. For example, if a customer_region column has many repeated values (like "North America"), the storage engine can compress that data down to a tiny fraction of its original size.
To leverage this, we adjust our dimensional designs:
- Keep tables wide but focused: In a row-based system, you might be taught to avoid "wide" tables (tables with too many columns). In columnar storage, having many columns is perfectly fine—you only pay the I/O cost for the columns you actually query.
- Choose narrow data types: Use the smallest data type possible (e.g.,
SMALLINTinstead ofBIGINTif the range allows). Smaller data types mean higher compression ratios, which results in faster scans. - Minimize nulls: While nulls don't "take up" space in the same way they do in row-based systems, columns with high cardinality (many unique values) are harder to compress than columns with low cardinality (many repeating values).
Practical Illustration
If you have a massive sales_fact table, avoid using SELECT * in your queries. Instead, explicitly select only the attributes required:
-- Efficient: Reads only the specific columns from storage
SELECT
region_id,
SUM(sale_amount)
FROM sales_fact
GROUP BY region_id;
By requesting only region_id and sale_amount, the engine skips reading the millions of other columns in that table, leading to faster execution and lower costs.
Key Takeaway: Design your tables to keep related data types together and always query only the specific columns you need to take full advantage of columnar compression and I/O efficiency.