Уникати select(*) в продакшені
Завантаження всіх колонок? Витрачається пам'ять та пропускну здатність.
Обирай тільки колонки які реально використовуєш. Менший об'єм даних. Швидші запити. Менше пам'яті.
Прихована ціна:
Текстові колонки можуть бути величезними. JSON колонки ще більші. Timestamps які можливо не потрібні.
Перевага індексу:
Запити з меншою кількістю колонок можуть використовувати covering індекси.
Порада: Профілюй з EXPLAIN щоб побачити чи запит використовує index-only scan.
// ПОГАНО: Завантажує все включаючи великі текстові поля
$posts = Post::where('published', true)->get();
// ДОБРЕ: Тільки потрібні колонки
$posts = Post::select('id', 'title', 'slug', 'published_at')
->where('published', true)
->get();
// Приклад API відповіді
public function index()
{
return Post::select([
'id',
'title',
'slug',
'excerpt',
'published_at',
])
->with('author:id,name,avatar')
->where('published', true)
->paginate(20);
}
// Dropdown/автозаповнення
$users = User::select('id', 'name')
->where('active', true)
->get();
// Зі зв'язками - вказуй колонки для обох
$posts = Post::select('id', 'title', 'author_id')
->with('author:id,name')
->get();