DEV Community

Mark Redding
Mark Redding

Posted on

5 Database Query Optimization Tips That Actually Work

After years of managing database-driven applications, I've learned that query optimization can make or break your application's performance. Here are five practical tips I use regularly.

1. Index Your Foreign Keys

This seems obvious, but it's often overlooked. Every foreign key should have an index:

CREATE INDEX idx_user_id ON orders(user_id);
Enter fullscreen mode Exit fullscreen mode

Without proper indexing, JOIN operations become painfully slow as your tables grow.

2. Use EXPLAIN to Understand Your Queries

Before optimizing, understand what's happening:

EXPLAIN SELECT * FROM products WHERE category_id = 5;
Enter fullscreen mode Exit fullscreen mode

Look for:

  • Table scans (bad)
  • Index usage (good)
  • Rows examined vs. returned

3. Avoid SELECT * in Production

Only fetch the columns you need:

// Bad
$query = "SELECT * FROM users";

// Good
$query = "SELECT id, name, email FROM users";
Enter fullscreen mode Exit fullscreen mode

This reduces memory usage and network transfer, especially with large tables.

4. Use Connection Pooling

Opening database connections is expensive. Reuse them:

// Use persistent connections in PHP
$pdo = new PDO($dsn, $user, $pass, [
    PDO::ATTR_PERSISTENT => true
]);
Enter fullscreen mode Exit fullscreen mode

5. Batch Your Inserts

Instead of individual inserts, batch them:

// Instead of this
foreach ($items as $item) {
    $db->insert($item);
}

// Do this
$db->insertBatch($items);
Enter fullscreen mode Exit fullscreen mode

This can speed up bulk operations by 10-100x.

Bonus: Monitor Slow Queries

Enable MySQL's slow query log to catch performance issues:

SET GLOBAL slow_query_log = 'ON';
SET GLOBAL long_query_time = 2;
Enter fullscreen mode Exit fullscreen mode

Any query taking over 2 seconds will be logged for analysis.

Final Thoughts

Database optimization is an ongoing process. Start with these fundamentals, measure your results, and iterate. Your users will thank you for the faster response times!

What's your go-to database optimization technique? Share in the comments!

Top comments (0)