
Selecting only needed columns can reduce I/O by 80% or more on wide tables. Learn how to identify and fix SELECT * queries across your organization.

Selecting only needed columns can reduce I/O by 80% or more on wide tables. Learn how to identify and fix SELECT * queries across your organization.
When you use SELECT *, Snowflake must read all columns from all micro-partitions, even if you only use 2-3 columns. For wide tables (50+ columns), this wastes 80-95% of I/O.
-- Table with 100 columns, 1TB per column = 100TB total
SELECT * FROM wide_table WHERE date = '2024-01-15';
-- Scans all 100TB
SELECT id, name, amount FROM wide_table WHERE date = '2024-01-15';
-- Scans only 3TB (97% reduction!)
-- BI tool default
SELECT * FROM customers WHERE region = 'West';
-- Optimized
SELECT customer_id, name, email, region
FROM customers WHERE region = 'West';
-- ORM default
SELECT * FROM orders WHERE customer_id = 123;
-- Optimized for display page
SELECT order_id, order_date, total, status
FROM orders WHERE customer_id = 123;
SELECT
QUERY_TEXT,
USER_NAME,
WAREHOUSE_NAME,
BYTES_SCANNED/1024/1024/1024 as GB_SCANNED
FROM SNOWFLAKE.ACCOUNT_USAGE.QUERY_HISTORY
WHERE QUERY_TEXT ILIKE '%SELECT *%'
AND START_TIME >= DATEADD(day, -7, CURRENT_TIMESTAMP())
ORDER BY BYTES_SCANNED DESC
LIMIT 100;
A data analytics team's dashboards used SELECT * on a 150-column customer table. Queries scanned 500GB-1TB each. After audit, dashboards needed only 12-15 columns. Updated queries to select specific columns, query scans dropped to 40-60GB (92% reduction), dashboard load times improved from 45s to 6s, and monthly compute costs dropped $8,000.
Uncover hidden inefficiencies and start reducing Snowflake spend in minutes no disruption, no risk.