Database Optimization in System Architecture
medium · System Architecture
22. Database Optimization: Performance at Scale Even the most powerful database hardware will collapse under a high-concurrency load if the data model is poorly structured or if queries are forced to scan millions of rows to find a single record. Database optimization is the science of balancing data integrity (via normalization) with retrieval performance (via indexing and denormalization). 1. Normalization: Integrity & Redundancy Reduction Normalization is the process of organizing data to minimize redundancy and dependency. It involves dividing large tables into smaller, related tables and defining relationships between them. The Process: Usually applied up to the "Third Normal Form" (3NF). 1NF: Eliminate repeating groups; ensure atomicity (each cell contains a single value). 2NF: Eliminate partial dependencies (all non-key attributes must depend on the entire primary key). 3NF: Eliminate transitive dependencies (non-key attributes should not depend on other non-key attributes). The Benefit: Reduces "data anomalies. " If you need to update a user's address, you update it in one place, and it propagates across the system automatically because all tables reference the unique user_id . The Cost: Excessive normalization forces the database to perform complex JOIN operations across many tables to reconstruct simple data views, which is computationally expensive at high scale. 2. Denormalization: Optimizing for Read Speed Denormalization is the strategic, intentional introduction of redundancy into a database schema. It is the direct opposite of normalization. The Mechanism: You intentionally store redundant data (e. g., storing the user_name inside the posts table rather than just a user_id ) to eliminate the need for JOIN operations. Production Use Case: High-traffic systems where "Read" performance is significantly more critical than "Write" performance. The Trade-off: You gain massive speed in data retrieval, but you introduce a significant risk of data inconsistency. If a user changes their name, you must now run an application-level update across every post they have ever written. 3. Indexing: The Database Map An Index is a specialized data structure (typically a B-Tree ) that allows the database engine to find specific rows without scanning the entire table. How it Works: Without an index, the database performs a "Full Table Scan"—looking at every single row from start to finish. With an index, the database traverses a balanced tree structure to find the pointer to the exact row location in $O(\log n)$ time. Production Guardrails: Don't Over-Index: Every index you add must be updated every time you perform an INSERT , UPDATE , or DELETE . Too many indexes will cripple your write performance. Index the Right Columns: Only index columns used in WHERE , JOIN , or ORDER BY clauses. 4. Query Optimization: Refining the Execution Even with a perfect schema, poorly written queries will bypass your indexes and force the database into slow execution paths. Core Optimization Techniques Avoid SELECT * : Only request the specific columns you need. Transferring massive, unused blobs over the network wastes bandwidth and database CPU cycles. SARGable Queries (Search ARGumentable): Write your WHERE clauses in a way that allows the database to utilize indexes. Bad (Non-SARGable): WHERE YEAR(created_at) = 2026 (The database must calculate the function for every row). Good (SARGable): WHERE created_at >= '2026-01-01' AND created_at < '2027-01-01' (The database can use an index range scan). Use EXPLAIN Plans: Every major database (PostgreSQL, MySQL) provides an EXPLAIN or EXPLAIN ANALYZE command. This tells you exactly how the database engine plans to execute your query—identifying if it's performing a "Full Table Scan" or effectively using an index. Database Optimization Reference Matrix Technique Primary Focus Best For Trade-off Normalization Data Integrity Complex relational data, financial apps Slower read performance due to joins. Denormalization Read Speed High-traffic, read-heavy dashboards Risk of data inconsistency. Indexing Search Efficiency Searching, filtering, sorting Slower write performance. Query Tuning Execution Efficiency Removing bottlenecks Requires developer expertise.