---
title: "Уникати select(*) в продакшені"
url: https://laravelukraine.com/blog/unikati-select-v-prodakseni
author: "Олексій Бабінцев"
date: 2026-07-02
---

# Уникати select(*) в продакшені

Завантаження всіх колонок? Витрачається пам'ять та пропускну здатність.

Обирай тільки колонки які реально використовуєш.
Менший об'єм даних. Швидші запити. Менше пам'яті.

**Прихована ціна:**

Текстові колонки можуть бути величезними.
JSON колонки ще більші.
Timestamps які можливо не потрібні.

**Перевага індексу:**

Запити з меншою кількістю колонок можуть використовувати covering індекси.

Порада: Профілюй з `EXPLAIN` щоб побачити чи запит використовує index-only scan.

```php
// ПОГАНО: Завантажує все включаючи великі текстові поля
$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();
```
