SQL Performance
Bottlenecks & Optimization Strategies
Gurram Vaishali
24N81A66G6
DATABASE ENGINEERING · QUERY OPTIMIZATION · PERFORMANCE TUNING
Introduction
What is SQL Performance? Why It Matters
How efficiently a database executes queries — One bad query can stall your entire app.
measured by speed, throughput, and resource use.
At scale, a 100ms delay costs real money and users.
Performance = Speed + Scalability + Stability Slow databases don't survive production.
Common Bottlenecks
1 Full Table Scans No index = every row read. Fatal at scale.
2 Missing Indexes Unindexed filters turn milliseconds into seconds.
3 Poor Schema Design Wrong data types and flat structures force redundant reads.
4 Excessive Joins Multi-table joins on unindexed keys destroy throughput.
5 Locking & Blocking Long transactions queue everything behind them.
Query Optimization
SELECT Specific Columns Filter Early (WHERE)
Never use SELECT *. Smaller working sets = faster queries.
Name only what you need — avoid wasted I/O. Filter as early as possible.
Replace Subqueries Join on Indexed Columns
Correlated subqueries run per row. Unindexed join keys = full scan per match.
Rewrite using JOINs or CTEs. Always index your join columns.
Indexing Strategies
An index is a sorted pointer structure that lets the DB jump to rows instead of scanning the whole table.
Clustered Index Non-Clustered Trade-offs
Reorders table rows by the key. Separate structure with row pointers. Indexes slow writes (INSERT/UPDATE).
One per table (usually PK). Multiple allowed per table. Every index needs maintenance.
Best for range queries. Use on filter/join columns. Avoid low-cardinality columns.
Database Design Optimization
Normalization Denormalization
• Removes redundancy via related tables • Adds redundancy to cut join complexity
• Reduces update anomalies • Faster reads for analytics (OLAP)
• Best for write-heavy systems (OLTP)
VS • Higher storage, inconsistency risk on writes
• Can cause costly joins at query time • Use only after profiling proves the need
Performance Monitoring Tools
Execution Plan
01
EXPLAIN / SET SHOWPLAN — reveals full scans, index use, join types, and row estimates.
Query Profiling
02
pg_stat_statements, SHOW PROFILES, Query Store — find which queries eat the most cumulative time.
Bottleneck Hunting
03
High-cost plan nodes, full-scan warnings, lock waits, long-running transactions in process list.
Key Takeaways
Profile first — never guess where the bottleneck lives.
Index your filter and join columns. It's the highest ROI fix.
SELECT * is a habit. Kill it.
Read execution plans. They tell the truth your code hides.
Performance is never 'done' — systems grow, queries must evolve.
Performance is a feature. Treat it like one.