- Never use `SELECT *`. Only query the specific columns you need to minimize costs.
- Always partition your large tables (typically by date) and cluster them by frequently queried metrics.
- Never execute `SELECT *`. BigQuery bills based on the amount of data scanned; explicitly name only the columns you require.
- Partition large tables (e.g. by ingestion time or date) to restrict the volume of data scanned by standard chronological queries.
- Cluster tables by high-cardinality columns (e.g. user_id) that are frequently filtered or aggregated.
- Avoid using JavaScript User-Defined Functions (UDFs) for high-volume transformations as they are substantially slower than native SQL.