Course contentsShow
← Databases & SQL
Lesson 1420 of 1,95313. Specialized Data StorageFree lesson

Query Profiling and Optimization

Identify slow queries using query tracing and execution plans.

In this lesson, you will learn how to diagnose performance bottlenecks by using execution plans and query tracing to uncover exactly where your database is spending its time.

When a query runs slowly, the issue is rarely just "slow hardware"; it is usually an inefficient path taken by the database engine to retrieve your data. To fix this, we look under the hood using two primary tools: Execution Plans and Query Tracing.

Understanding Execution Plans

An execution plan is a roadmap generated by the query optimizer. It shows you the strategy the database has chosen to execute your request. When you prefix a query with the EXPLAIN keyword, the engine breaks down the operations involved, such as:

  • Sequential Scans: The database is reading every single row in a table. This is often a red flag unless the table is very small.
  • Index Scans: The engine is using an index to pinpoint specific rows. This is generally much faster.
  • Cost Estimates: These are arbitrary units assigned by the optimizer to represent the predicted "work" required for each step.

If your plan shows a Seq Scan on a massive table that you thought was indexed, you’ve found your bottleneck.

Using Query Tracing

While an execution plan tells you how the database intends to run a query, query tracing tells you what actually happened. Tracing tracks the lifecycle of a request as it moves through the system. It exposes how much time was spent waiting for disk I/O, how many SSTables were touched (common in LSM-tree systems), or if the query was blocked by a lock or a tombstone accumulation.

For example, in many wide-column stores, you might run a trace like this:

TRACING ON;
SELECT * FROM sensor_readings WHERE device_id = 'A1' AND timestamp > '2023-01-01';

The output will display the latency for each node involved, the number of partitions accessed, and whether the system had to perform extensive "merge-sort" operations on fragmented data. By identifying if a query is hitting too many nodes or reading unnecessary disk blocks, you can decide whether to add a secondary index or denormalize your data to better suit your access pattern.

Key Takeaway: Query profiling is the practice of moving from guesswork to precision by using execution plans to reveal inefficient paths and tracing to pinpoint exactly where latency occurs during execution.