---
title: Prefer Select Over Include in Prisma Queries
impact: HIGH
impactDescription: Reduces data transfer and improves query performance
tags: prisma, database, performance, security
---

## Prefer Select Over Include in Prisma Queries

**Impact: HIGH (Reduces data transfer and improves query performance)**

Using `select` instead of `include` in Prisma queries fetches only the fields you need, improving performance and preventing accidental exposure of sensitive data.

**Incorrect (using include fetches all fields):**

```typescript
const booking = await prisma.booking.findFirst({
  include: {
    user: true, // This gets ALL user fields including sensitive ones
  }
});
```

**Correct (using select for specific fields):**

```typescript
const booking = await prisma.booking.findFirst({
  select: {
    id: true,
    title: true,
    user: {
      select: {
        id: true,
        name: true,
        email: true,
      }
    }
  }
});
```

**Benefits:**
- **Performance**: Smaller payloads, faster queries
- **Security**: Prevents accidental exposure of sensitive fields (e.g., `credential.key`)
- **Clarity**: Makes data requirements explicit

**Exception:** Use `include` only when you genuinely need all fields from a relation, which is rare.

Reference: [Cal.diy Engineering Standards](https://cal.com/blog/engineering-in-2026-and-beyond)
