Slow Queries: How to Detect and Optimize in MySQL and PostgreSQL

Introduction

Slow queries degrade application responsiveness, increase resource consumption, and may cause downtime. Identifying and optimizing slow queries is essential for maintaining an efficient database. This article provides an in-depth guide to detecting and optimizing slow queries in MySQL andPostgreSQL, emphasizing their similarities and differences.

Understanding Slow Queries

A slow query is any database query that takes longer than expected to execute. The threshold for "slow" varies based on system requirements but is commonly defined by MySQL's long_query_time setting or PostgreSQL's log_min_duration_statement. Slow queries can arise from several factors, including inefficient indexing, suboptimal query structures, or high contention in database locks.

Causes of Slow Queries

  • Lack of Indexing: Queries without proper indexes may result in full table scans.
  • Poor Query Design: Unoptimized SQL statements increase execution time.
  • Lock Contention: Queries waiting on locks cause delays.
  • High Volume of Data: Larger datasets naturally require more time to process.
  • Inefficient Joins: Complex joins without appropriate indexing slow performance.
  • Poor Caching Strategy: Absence of caching forces queries to run frequently.
  • I/O Bottlenecks: Queries involving extensive disk reads slow down database performance.
  • Suboptimal Query Execution Plans: The optimizer might choose inefficient execution paths.
  • Inadequate Statistics: Outdated or missing table statistics lead to poor optimizer decisions.
  • Resource Contention: Competition for CPU, memory, or I/O resources from other processes.

Detecting Slow Queries

Both MySQL and PostgreSQL provide tools to identify slow queries.

1. MySQL Slow Query Log vs. PostgreSQL Log

MySQL

-- Logs queries taking more than 1 second
SET GLOBAL slow_query_log = 'ON';
SET GLOBAL long_query_time = 1;

-- Optional: log to a table instead of a file
SET GLOBAL log_output = 'TABLE';

PostgreSQL

-- Logs queries taking more than 1 second (in ms)
ALTER SYSTEM SET log_min_duration_statement = 1000;
-- Optional: log all statements
ALTER SYSTEM SET log_statement = 'all';
SELECT pg_reload_conf();


PostgreSQL logs slow queries in its general log file, typically in the data directory's pg_log subdirectory.

2. Using EXPLAIN and EXPLAIN ANALYZE

MySQL

EXPLAIN SELECT * FROM orders WHERE customer_id = 1001;
EXPLAIN ANALYZE SELECT * FROM orders WHERE customer_id = 1001;

Provides:

  • Access methods for each table
  • Join types
  • Index usage information
  • Estimated row counts

PostgreSQL

EXPLAIN SELECT * FROM orders WHERE customer_id = 1001;
EXPLAIN ANALYZE SELECT * FROM orders WHERE customer_id = 1001;

Provides:

  • Execution plan with node types
  • Cost estimates (startup and total)
  • Actual execution time when using ANALYZE
  • Buffer usage statistics with BUFFERS
  • Worker information for parallel queries

PostgreSQL’s EXPLAIN ANALYZE is generally more detailed, offering better query diagnostics.

3. Performance Schema vs. pg_stat_statements

MySQL

SET GLOBAL performance_schema = ON;
SELECT digest_text AS query, count_star
AS exec_count, round(avg_timer_wait/1000000000, 2)
AS avg_exec_time_ms, round(sum_timer_wait/1000000000, 2)
AS total_exec_time_ms
FROM performance_schema.events_statements_summary_by_digest
ORDER BY avg_timer_wait DESCLIMIT 10;

PostgreSQL

CREATE EXTENSION IF NOT EXISTS pg_stat_statements;
SELECT query, calls, total_time, total_time/calls
AS avg_time, rows/calls
AS avg_rows
FROM pg_stat_statements
ORDER BY total_time DESCLIMIT 10;

pg_stat_statements in PostgreSQL provides a similar function to MySQL's Performance Schema, helping to analyze the most expensive queries.

4. MySQL Enterprise Monitor and Third-Party Tools

  • MySQL Enterprise Monitor: Provides graphical insights into query performance.
  • Percona Toolkit (pt-query-digest): Analyzes slow query logs for patterns.
  • Rapydo: Offers real-time MySQL performance monitoring and query optimization insights, along with automations that proactively detect and resolve slow query issues.
  • New Relic & Datadog: Cloud-based monitoring solutions for MySQL performance.

Optimizing Slow Queries

1. Index Optimization

MySQL

CREATE INDEX idx_customer_id ON orders(customer_id);
CREATE FULLTEXT INDEX idx_product_name ON products(product_name);

PostgreSQL

CREATE INDEX idx_customer_id ON orders(customer_id);
CREATE INDEX idx_product_search ON products USING GIN (to_tsvector('english', product_name));

PostgreSQL supports more advanced index types, including GIN (efficient for text search) and BRIN (for large sequential data).

2. Query Refactoring

Avoid functions on indexed columns:

-- Bad
SELECT * FROM orders WHERE YEAR(order_date) = 2023;
-- Good
SELECT * FROM orders WHERE order_date BETWEEN '2023-01-01' AND '2023-12-31';

Functions on indexed columns force full table scans.

3. Using JOIN Efficiently

CREATE INDEX idx_customer_id ON orders(customer_id);SELECT * FROM customers c JOIN orders o ON c.customer_id = o.customer_id;

4. Partitioning Large Tables

PostgreSQL

CREATE TABLE orders (order_id SERIAL, customer_id INT, order_date DATE, PRIMARY KEY (order_id, order_date)) PARTITION BY RANGE (order_date);

PostgreSQL supports native partition pruning, making queries on partitioned tables faster than in MySQL.

5. Database Configuration Optimization

MySQL

SET GLOBAL innodb_buffer_pool_size = 2G;
SET GLOBAL join_buffer_size = 2M;

PostgreSQL

ALTER SYSTEM SET shared_buffers = '2GB';
ALTER SYSTEM SET work_mem = '16MB';SELECT pg_reload_conf();

PostgreSQL allows more fine-grained tuning of query memory settings.

6. Caching Query Results

PostgreSQL

CREATE MATERIALIZED VIEW fast_orders ASSELECT *
FROM orders WHERE order_date > now() - interval '30 days';
REFRESH MATERIALIZED VIEW fast_orders;

PostgreSQL’s materialized views offer built-in query caching, whereas MySQL relies on external solutions like Redis.

Conclusion

Both MySQL and PostgreSQL provide robust tools for detecting and optimizing slow queries, but they have different strengths:

  • MySQL is easier to configure, widely used in web applications, and offers strong replication.
  • PostgreSQL excels in advanced indexing, partitioning, query planning, and parallel execution.

Choosing between MySQL and PostgreSQL depends on your workload:

  • Use PostgreSQL if you need advanced query optimization, parallel execution, and sophisticated indexing.
  • Use MySQL if simplicity, ease of use, and a well-supported ecosystem are your priorities.

Regardless of the database, implementing the best practices outlined in this article will ensure optimal performance for your workloads.

 

More from the blog

Cost vs Performance in Cloud RDBMS: Tuning for Efficiency, Not Just Speed

Cloud database environments require balancing performance with rising costs, challenging traditional monitoring approaches. Rapydo's specialized observability platform delivers actionable insights by identifying inefficient queries, providing workload heatmaps, and enabling automated responses. Case studies demonstrate how Rapydo helped companies reduce AWS costs by up to 30% through workload profiling and right-sizing. Organizations that master database efficiency using tools like Rapydo gain a competitive advantage in the cloud-native landscape.

Keep reading

The Rise of Multi-Model Databases in Modern Architectures: Innovation, Market Impact, and Organizational Readiness

Multi-model databases address modern data diversity challenges by supporting multiple data models (document, graph, key-value, relational, wide-column) within a single unified platform, eliminating the complexity of traditional polyglot persistence approaches. These systems feature unified query engines, integrated indexing, and cross-model transaction management, enabling developers to access multiple representations of the same data without duplication or complex integration. Real-world applications span e-commerce, healthcare, finance, and IoT, with each industry leveraging different model combinations to solve specific business problems. Organizations adopting multi-model databases report infrastructure consolidation, operational efficiency gains, and faster development cycles, though successful implementation requires addressing challenges in schema governance, performance monitoring, and team skill development. As this technology continues to evolve, organizations that master multi-model architectures gain competitive advantages through reduced complexity, improved developer productivity, and more resilient data infrastructures.

Keep reading

Navigating the Complexities of Cloud-Based Database Solutions: A Guide for CTOs, DevOps, DBAs, and SREs

Cloud database adoption offers compelling benefits but introduces challenges in performance volatility, cost management, observability, and compliance. Organizations struggle with unpredictable performance, escalating costs, limited visibility, and complex regulatory requirements. Best practices include implementing query-level monitoring, automating tuning processes, establishing policy-based governance, and aligning infrastructure with compliance needs. Rapydo's specialized platform addresses these challenges through deep observability, intelligent optimization, and custom rule automation. Organizations implementing these solutions report significant improvements in performance, substantial cost savings, and enhanced compliance capabilities.

Keep reading

DevOps and Database Reliability Engineering: Ensuring Robust Data Management

Here's a concise 5-line summary of the blog: Database Reliability Engineering (DBRE) integrates DevOps methodologies with specialized database management practices to ensure robust, scalable data infrastructure. Organizations implementing DBRE establish automated pipelines for database changes alongside application code, replacing traditional siloed approaches with cross-functional team structures. Core principles include comprehensive observability, automated operations, proactive performance optimization, and strategic capacity planning. Real-world implementations by organizations like Netflix, Evernote, and Standard Chartered Bank demonstrate significant improvements in deployment velocity and system reliability. Tools like Rapydo enhance DBRE implementation through advanced monitoring, automation, and performance optimization capabilities that significantly reduce operational overhead and infrastructure costs.

Keep reading

Database Trends and Innovations: A Comprehensive Outlook for 2025

The database industry is evolving rapidly, driven by AI-powered automation, edge computing, and cloud-native technologies. AI enhances query optimization, security, and real-time analytics, while edge computing reduces latency for critical applications. Data as a Service (DaaS) enables scalable, on-demand access, and NewSQL bridges the gap between relational and NoSQL databases. Cloud migration and multi-cloud strategies are becoming essential for scalability and resilience. As database roles evolve, professionals must adapt to decentralized architectures, real-time analytics, and emerging data governance challenges.

Keep reading

Fixing High CPU & Memory Usage in AWS RDS

The blog explains how high CPU and memory usage in Amazon RDS can negatively impact database performance and outlines common causes such as inefficient queries, poor schema design, and misconfigured instance settings. It describes how to use AWS tools like CloudWatch, Enhanced Monitoring, and Performance Insights to diagnose these issues effectively. The guide then provides detailed solutions including query optimization, proper indexing, instance right-sizing, and configuration adjustments. Finally, it shares real-world case studies and preventative measures to help maintain a healthy RDS environment over the long term.

Keep reading

The Future of SQL: Evolution and Innovation in Database Technology

SQL remains the unstoppable backbone of data management, constantly evolving for cloud-scale, performance, and security. MySQL and PostgreSQL push the boundaries with distributed architectures, JSON flexibility, and advanced replication. Rather than being replaced, SQL coexists with NoSQL, powering hybrid solutions that tackle diverse data challenges. Looking toward the future, SQL’s adaptability, consistency, and evolving capabilities ensure it stays pivotal in the database landscape.

Keep reading

Rapydo vs AWS CloudWatch: Optimizing AWS RDS MySQL Performance

The blog compares AWS CloudWatch and Rapydo in terms of optimizing AWS RDS MySQL performance, highlighting that while CloudWatch provides general monitoring, it lacks the MySQL-specific insights necessary for deeper performance optimization. Rapydo, on the other hand, offers specialized metrics, real-time query analysis, and automated performance tuning that help businesses improve database efficiency, reduce costs, and optimize MySQL environments.

Keep reading

Mastering AWS RDS Scaling: A Comprehensive Guide to Vertical and Horizontal Strategies

The blog provides a detailed guide on scaling Amazon Web Services (AWS) Relational Database Service (RDS) to meet the demands of modern applications. It explains two main scaling approaches: vertical scaling (increasing the resources of a single instance) and horizontal scaling (distributing workload across multiple instances, primarily using read replicas). The post delves into the mechanics, benefits, challenges, and use cases of each strategy, offering step-by-step instructions for implementation and best practices for performance tuning. Advanced techniques such as database sharding, caching, and cross-region replication are also covered, alongside cost and security considerations. Real-world case studies highlight successful scaling implementations, and future trends like serverless databases and machine learning integration are explored. Ultimately, the blog emphasizes balancing performance, cost, and complexity when crafting a scaling strategy.

Keep reading

Deep Dive into MySQL Internals: A Comprehensive Guide for DBAs - Part II

This guide explores MySQL’s internals, focusing on architecture, query processing, and storage engines like InnoDB and MyISAM. It covers key components such as the query optimizer, parser, and buffer pool, emphasizing performance optimization techniques. DBAs will learn about query execution, index management, and strategies to enhance database efficiency. The guide also includes best practices for tuning MySQL configurations. Overall, it offers valuable insights for fine-tuning MySQL databases for high performance and scalability.

Keep reading

Deep Dive into MySQL Internals: A Comprehensive Guide for DBAs - Part I

This guide explores MySQL’s internals, focusing on architecture, query processing, and storage engines like InnoDB and MyISAM. It covers key components such as the query optimizer, parser, and buffer pool, emphasizing performance optimization techniques. DBAs will learn about query execution, index management, and strategies to enhance database efficiency. The guide also includes best practices for tuning MySQL configurations. Overall, it offers valuable insights for fine-tuning MySQL databases for high performance and scalability.

Keep reading

Implementing Automatic User-Defined Rules in Amazon RDS MySQL with Rapydo

In this blog, we explore the power of Rapydo in creating automatic user-defined rules within Amazon RDS MySQL. These rules allow proactive database management by responding to various triggers such as system metrics or query patterns. Key benefits include enhanced performance, strengthened security, and better resource utilization. By automating actions like query throttling, user rate-limiting, and real-time query rewriting, Rapydo transforms database management from reactive to proactive, ensuring optimized operations and SLA compliance.

Keep reading

MySQL Optimizer: A Comprehensive Guide

The blog provides a deep dive into the MySQL optimizer, crucial for expert DBAs seeking to improve query performance. It explores key concepts such as the query execution pipeline, optimizer components, cost-based optimization, and indexing strategies. Techniques for optimizing joins, subqueries, derived tables, and GROUP BY/ORDER BY operations are covered. Additionally, the guide emphasizes leveraging optimizer hints and mastering the EXPLAIN output for better decision-making. Practical examples illustrate each optimization technique, helping DBAs fine-tune their MySQL systems for maximum efficiency.

Keep reading

Mastering MySQL Query Optimization: From Basics to AI-Driven Techniques

This blog explores the vital role of query optimization in MySQL, ranging from basic techniques like indexing and query profiling to cutting-edge AI-driven approaches such as machine learning-based index recommendations and adaptive query optimization. It emphasizes the importance of efficient queries for performance, cost reduction, and scalability, offering a comprehensive strategy that integrates traditional and AI-powered methods to enhance database systems.

Keep reading

Mastering MySQL Scaling: From Single Instance to Global Deployments

Master the challenges of scaling MySQL efficiently from single instances to global deployments. This guide dives deep into scaling strategies, performance optimization, and best practices to build a high-performance database infrastructure. Learn how to manage multi-tenant environments, implement horizontal scaling, and avoid common pitfalls.

Keep reading

Implementing Automatic Alert Rules in Amazon RDS MySQL

Automatic alert rules in Amazon RDS MySQL are essential for maintaining optimal database performance and preventing costly downtime. Real-time alerts act as an early warning system, enabling rapid responses to potential issues, thereby preventing database crashes. User-defined triggers, based on key metrics and specific conditions, help manage resource utilization effectively. The proactive performance management facilitated by these alerts ensures improved SLA compliance and enhanced scalability. By incorporating real-time alerts, database administrators can maintain stability, prevent performance degradation, and ensure continuous service availability.

Keep reading

Understanding Atomicity, Consistency, Isolation, and Durability (ACID) in MySQL

ACID properties—Atomicity, Consistency, Isolation, and Durability—are crucial for ensuring reliable data processing in MySQL databases. This blog delves into each property, presenting common issues and practical MySQL solutions, such as using transactions for atomicity, enforcing constraints for consistency, setting appropriate isolation levels, and configuring durability mechanisms. By understanding and applying these principles, database professionals can design robust, reliable systems that maintain data integrity and handle complex transactions effectively.

Keep reading

 AWS RDS Pricing: A Comprehensive Guide

The blog “AWS RDS Pricing: A Comprehensive Guide” provides a thorough analysis of Amazon RDS pricing structures, emphasizing the importance of understanding these to optimize costs while maintaining high database performance. It covers key components like instance type, database engine, storage options, and deployment configurations, explaining how each impacts overall expenses. The guide also discusses different pricing models such as On-Demand and Reserved Instances, along with strategies for cost optimization like right-sizing instances, using Aurora Serverless for variable workloads, and leveraging automated snapshots. Case studies illustrate practical applications, and future trends highlight ongoing advancements in automation, serverless options, and AI-driven optimization. The conclusion underscores the need for continuous monitoring and adapting strategies to balance cost, performance, and security.

Keep reading

AWS RDS vs. Self-Managed Databases: A Comprehensive Comparison

This blog provides a detailed comparison between AWS RDS (Relational Database Service) and self-managed databases. It covers various aspects such as cost, performance, scalability, management overhead, flexibility, customization, security, compliance, latency, and network performance. Additionally, it explores AWS Aurora Machine Learning and its benefits. The blog aims to help readers understand the trade-offs and advantages of each approach, enabling them to make informed decisions based on their specific needs and expertise. Whether prioritizing ease of management and automation with AWS RDS or opting for greater control and customization with self-managed databases, the blog offers insights to guide the choice.

Keep reading

Optimizing Multi-Database Operations with Execute Query

Execute Query - Blog Post Executing queries across multiple MySQL databases is essential for: 1. Consolidating Information: Combines data for comprehensive analytics. 2. Cross-Database Operations: Enables operations like joining tables from different databases. 3. Resource Optimization: Enhances performance using optimized databases. 4. Access Control and Security: Manages data across databases for better security. 5. Simplifying Data Management: Eases data management without complex migration. The Execute Query engine lets Dev and Ops teams run SQL commands or scripts across multiple servers simultaneously, with features like: - Selecting relevant databases - Using predefined or custom query templates - Viewing results in tabs - Detecting schema drifts and poor indexes - Highlighting top time-consuming queries - Canceling long-running queries This tool streamlines cross-database operations, enhancing efficiency and data management.

Keep reading

Gain real time visiblity into hundreds of MySQL databases, and remediate on the spot

MySQL servers are crucial for managing data in various applications but face challenges like real-time monitoring, troubleshooting, and handling uncontrolled processes. Rapydo's Processes & Queries View addresses these issues with features such as: 1. Real-Time Query and Process Monitoring: Provides visibility into ongoing queries, helping prevent bottlenecks and ensure optimal performance. 2. Detailed Visualizations: Offers table and pie chart views for in-depth analysis and easy presentation of data. 3. Process & Queries Management: Allows administrators to terminate problematic queries instantly, enhancing system stability. 4. Snapshot Feature for Retrospective Analysis: Enables post-mortem analysis by capturing and reviewing database activity snapshots. These tools provide comprehensive insights and control, optimizing MySQL server performance through both real-time and historical analysis.

Keep reading

MySQL 5.7 vs. MySQL 8.0: New Features, Migration Planning, and Pre-Migration Checks

This article compares MySQL 5.7 and MySQL 8.0, emphasizing the significant improvements in MySQL 8.0, particularly in database optimization, SQL language extensions, and administrative features. Key reasons to upgrade include enhanced query capabilities, support from cloud providers, and keeping up with current technology. MySQL 8.0 introduces window functions and common table expressions (CTEs), which simplify complex SQL operations and improve the readability and maintenance of code. It also features JSON table functions and better index management, including descending and invisible indexes, which enhance performance and flexibility in database management. The article highlights the importance of meticulous migration planning, suggesting starting the planning process at least a year in advance and involving thorough testing phases. It stresses the necessity of understanding changes in the optimizer and compatibility issues, particularly with third-party tools and applications. Security enhancements, performance considerations, and data backup strategies are also discussed as essential components of a successful upgrade. Finally, the article outlines a comprehensive approach for testing production-level traffic in a controlled environment to ensure stability and performance post-migration.

Keep reading

How to Gain a Bird's-Eye View of Stressing Issues Across 100s of MySQL DB Instances

Rapydo Scout offers a unique solution for monitoring stress points across both managed and unmanaged MySQL database instances in a single interface, overcoming the limitations of native cloud vendor tools designed for individual databases. It features a Master-Dashboard divided into three main categories: Queries View, Servers View, and Rapydo Recommendations, which together provide comprehensive insights into query performance, server metrics, and optimization opportunities. Through the Queries View, users gain visibility into transaction locks, the slowest and most repetitive queries across their database fleet. The Servers View enables correlation of CPU and IO metrics with connection statuses, while Rapydo Recommendations deliver actionable insights for database optimization directly from the MySQL Performance Schema. Connecting to Rapydo Scout is straightforward, taking no more than 10 minutes, and it significantly enhances the ability to identify and address the most pressing issues across a vast database environment.

Keep reading

Unveiling Rapydo

Rapydo Emerges from Stealth: Revolutionizing Database Operations for a Cloud-Native World In today's rapidly evolving tech landscape, the role of in-house Database Administrators (DBAs) has significantly shifted towards managed services like Amazon RDS, introducing a new era of efficiency and scalability. However, this transition hasn't been without its challenges. The friction between development and operations teams has not only slowed down innovation but also incurred high infrastructure costs, signaling a pressing need for a transformative solution. Enter Rapydo, ready to make its mark as we step out of stealth mode.

Keep reading

SQL table partitioning

Using table partitioning, developers can split up large tables into smaller, manageable pieces. A database’s performance and scalability can be improved when users only have access to the data they need, not the whole table.

Keep reading

Block queries from running on your database

As an engineer, you want to make sure that your database is running smoothly, with no unexpected outages or lags in response-time. One of the best ways to do this is to make sure that only the queries you expect to run are being executed.

Keep reading

Uncover the power of database log analysis

Logs.They’re not exactly the most exciting things to deal with, and it’s easy to just ignore them and hope for the best. But here’s the thing: logs are actually super useful and can save you a ton of headaches in the long run.

Keep reading