Files
calendar/agents/rules/data-prefer-select-over-include.md
T
Eunjae LeeGitHubDevin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com>
f691258a5c refactor(agents): move prescriptive content from knowledge-base to rules (#26925)
* refactor(agents): move prescriptive content from knowledge-base to rules

- Create architecture-page-level-auth.md for Next.js auth checks
- Create data-prefer-select-over-include.md for Prisma query optimization
- Create performance-dayjs-usage.md for Day.js performance guidelines
- Create quality-avoid-barrel-imports.md for import best practices
- Update knowledge-base.md to reference rules directory
- Remove duplicated prescriptive content from knowledge-base.md

Co-Authored-By: eunjae@cal.com <hey@eunjae.dev>

* chore(agents): remove redundant rules reference from knowledge-base

Co-Authored-By: eunjae@cal.com <hey@eunjae.dev>

* docs: add agents/rules reference to AGENTS.md extended documentation

Co-Authored-By: eunjae@cal.com <hey@eunjae.dev>

---------

Co-authored-by: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com>
2026-01-16 10:43:36 -03:00

50 lines
1.3 KiB
Markdown

---
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.com Engineering Standards](https://cal.com/blog/engineering-in-2026-and-beyond)