数据库优化Skill database-optimization

数据库优化技能专注于SQL查询优化、索引设计、N+1问题解决和缓存策略实施,帮助提升PostgreSQL、MySQL等数据库的性能表现。关键词:数据库优化、SQL查询优化、索引设计、N+1问题、缓存策略、数据库性能、慢查询优化、EXPLAIN ANALYZE、复合索引、性能监控。

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

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

数据库优化

本技能用于优化数据库性能,包括查询优化、索引策略、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问题解决
- 缓存实现
- 数据库性能提升