"Оптимизация запросов и использование Query Builder в Laravel"
Производительность базы данных — критически важная часть любого Laravel-приложения.
Даже мощный Eloquent ORM может создавать медленные запросы, если использовать его неправильно.
В этой статье разберём:
- Laravel Query Builder;
- join-запросы;
- eager loading;
- индексы;
- оптимизацию SQL;
- ускорение Laravel database.
Что такое Query Builder
Laravel Query Builder — низкоуровневый инструмент построения SQL-запросов.
Он быстрее Eloquent и подходит для сложных запросов.
Пример Query Builder
use Illuminate\Support\Facades\DB;
$posts = DB::table('posts')->get();
where()
DB::table('posts')
->where('published', true)
->get();
select()
DB::table('posts')
->select('id', 'title')
->get();
Laravel Join
Join используется для объединения таблиц.
Inner Join
DB::table('posts')
->join('users', 'posts.user_id', '=', 'users.id')
->select('posts.*', 'users.name')
->get();
Left Join
->leftJoin()
Group By
DB::table('posts')
->groupBy('category_id')
->get();
Order By
->orderBy('created_at', 'desc')
Pagination
->paginate(15)
Eager Loading
Одна из главных оптимизаций Laravel.
Post::with('comments')->get();
N+1 Problem
Плохой пример:
foreach ($posts as $post) {
echo $post->comments;
}
Laravel выполнит десятки запросов.
Индексы в MySQL и PostgreSQL
Очень важны для производительности.
Migration:
$table->index('email');
Composite Index
$table->index(['user_id', 'published']);
Chunking данных
Для больших таблиц:
Post::chunk(100, function ($posts) {
});
Cursor Pagination
->cursorPaginate(15)
Query Logging
Laravel позволяет анализировать SQL.
DB::enableQueryLog();
Cache запросов
Cache::remember('posts', 60, function () {
});
Raw SQL
При необходимости:
DB::select('SELECT * FROM posts');
Когда использовать Query Builder
Query Builder подходит для:
- сложных SQL;
- аналитики;
- heavy joins;
- отчётов;
- высоконагруженных API.
Лучшие практики оптимизации
Рекомендуется:
- избегать select *;
- использовать eager loading;
- индексировать foreign keys;
- кешировать тяжёлые запросы;
- минимизировать joins.
Laravel Database Performance
Производительность Laravel сильно зависит от:
- структуры БД;
- индексов;
- количества запросов;
- качества SQL.
Итоги
Laravel Query Builder и Eloquent позволяют строить мощные database-приложения.
Для высокой производительности важно:
- оптимизировать запросы;
- использовать join правильно;
- избегать N+1;
- применять eager loading и indexes.
Это особенно важно для крупных Laravel API и SaaS-проектов.