数据库优化 database-optimization

数据库优化技能专注于SQL查询性能调优、索引策略设计、N+1问题修复、缓存层实现及数据库整体性能提升。适用于PostgreSQL、MySQL等多种数据库系统,通过分析执行计划、优化数据访问模式、设计高效索引结构,显著降低查询延迟,提升系统吞吐量。关键词:数据库优化、SQL查询优化、索引设计、N+1问题、缓存策略、数据库性能、PostgreSQL优化、MySQL调优、慢查询分析、执行计划。

后端开发 0 次安装 0 次浏览 更新于 2/28/2026

name: database-optimization description: SQL查询优化与数据库性能专家。用于优化慢查询、修复N+1问题、设计索引、实现缓存或提升数据库性能。支持PostgreSQL、MySQL及其他数据库。 author: Joseph OBrien status: unpublished updated: ‘2025-12-23’ version: 1.0.1 tag: skill type: skill

数据库优化

本技能用于优化数据库性能,包括查询优化、索引策略、N+1问题解决和缓存实现。

何时使用此技能

  • 优化慢速数据库查询时
  • 修复N+1查询问题时
  • 设计索引时
  • 实现缓存策略时
  • 优化数据库迁移时
  • 提升数据库性能时

此技能的功能

  1. 查询优化:分析与优化SQL查询
  2. 索引设计:创建合适的索引
  3. N+1问题解决:修复N+1查询问题
  4. 缓存:实现缓存层(Redis、Memcached)
  5. 迁移优化:优化数据库迁移
  6. 性能监控:设置查询性能监控

使用方法

优化查询

优化这个慢速数据库查询
修复这段代码中的N+1查询问题

特定分析

分析查询性能并建议索引

优化领域

查询优化

技术:

  • 使用EXPLAIN ANALYZE
  • 优化JOIN操作
  • 减少数据扫描
  • 使用合适的索引
  • 避免SELECT *

索引设计

策略:

  • 为频繁查询的列创建索引
  • 为多列查询创建复合索引
  • 避免过度索引
  • 监控索引使用情况
  • 删除未使用的索引

N+1问题

模式:

# 错误:N+1查询
users = User.all()
for user in users:
    posts = Post.where(user_id=user.id)  # N个查询

# 正确:使用JOIN的单次查询
users = User.all().includes(:posts)  # 1个查询

示例

示例1:查询优化

输入:优化慢速用户查询

输出

## 数据库优化:用户查询

### 当前查询
```sql
SELECT * FROM users
WHERE email = 'user@example.com';
-- 执行时间:450ms

分析

  • 全表扫描(email列无索引)
  • 扫描100万+行数据

优化

-- 添加索引
CREATE INDEX idx_users_email ON users(email);

-- 优化后的查询
SELECT id, email, name FROM users
WHERE email = 'user@example.com';
-- 执行时间:2ms

影响

  • 查询时间:450ms → 2ms(提升99.5%)
  • 索引大小:约50MB

## 最佳实践

### 数据库优化

1. **先测量**:使用EXPLAIN ANALYZE
2. **策略性索引**:并非每列都需要索引
3. **监控**:跟踪慢查询日志
4. **缓存**:缓存昂贵的查询
5. **反规范化**:根据读取模式合理使用

## 参考文件

- **`references/query_patterns.md`** - 常见查询优化模式、反模式及缓存策略

## 相关用例

- 查询优化
- 索引设计
- N+1问题解决
- 缓存实现
- 数据库性能提升