Оптимизация SQL-запросов в PHP: избавляемся от тормозов! 🚀



Сегодня я покажу вам, как улучшить производительность SQL-запросов в PHP и избавиться от лишней нагрузки на базу данных.



1. Используйте подготовленные запросы

Не только защита от SQL-инъекций, но и кеширование запросов внутри СУБД!

Пример с PDO:





$stmt = $pdo->prepare("SELECT * FROM users WHERE email = :email");

$stmt->execute(['email' => $email]);

$user = $stmt->fetch();





2. Выбирайте только нужные данные

Зачем вам SELECT *, если нужно только id и name? Выбирайте только нужные колонки!





$stmt = $pdo->query("SELECT id, name FROM users");





3. Индексы – ваши друзья

Проверяйте, есть ли индексы на полях, которые часто используются в WHERE и JOIN. Без индексов база будет делать полный перебор строк!





CREATE INDEX idx_email ON users(email);





4. Избегайте N+1 запроса

Вместо 100 мелких запросов – один с JOIN.



Плохо (100 запросов в цикле!):





foreach ($users as $user) {

$stmt = $pdo->prepare("SELECT * FROM orders WHERE user_id = ?");

$stmt->execute([$user['id']]);

$orders[$user['id']] = $stmt->fetchAll();

}





Хорошо (один запрос):





$query = "SELECT users.id, users.name, orders.id as order_id

FROM users

LEFT JOIN orders ON users.id = orders.user_id";

$stmt = $pdo->query($query);

$result = $stmt->fetchAll();





5. Используйте кеширование

Храните частые запросы в Redis или Memcached, чтобы снизить нагрузку на базу.





$cacheKey = "users_list";

$users = $redis->get($cacheKey);



if (!$users) {

$users = $pdo->query("SELECT id, name FROM users")->fetchAll();

$redis->setex($cacheKey, 3600, json_encode($users));

}





Эти советы помогут вам ускорить ваш PHP-код, снизить нагрузку на базу данных и сделать сайт более отзывчивым.