# Performance Anti-Patterns ## N+1 Queries **Signal**: Many small queries instead of one batch query. ### SQLAlchemy (Python) ```python # BAD: N+1 — each user triggers a query for posts users = session.query(User).all() for user in users: print(user.posts) # lazy load, 1 query per user # GOOD: eager loading from sqlalchemy.orm import joinedload, selectinload users = session.query(User).options(selectinload(User.posts)).all() ``` ### Prisma (TypeScript) ```typescript // BAD: N+1 const users = await prisma.user.findMany(); for (const user of users) { const posts = await prisma.post.findMany({ where: { authorId: user.id } }); } // GOOD: include const users = await prisma.user.findMany({ include: { posts: true } }); ``` ### Django ```python # BAD for order in Order.objects.all(): print(order.customer.name) # N+1 # GOOD for order in Order.objects.select_related('customer').all(): print(order.customer.name) # 1 query with JOIN ``` ## Unnecessary Re-renders (React) **Signal**: Components re-rendering when their data hasn't changed. ```typescript // BAD: new object created every render // GOOD: stable reference const style = useMemo(() => ({ color: 'red' }), []); // BAD: new function every render