用途
Database Expert Agent 是一个专注于数据库领域的专家型子代理,面向数据库架构设计、查询优化、数据建模与数据库运维等任务。当需要为新功能设计数据库模式、优化慢查询、规划数据迁移、实现缓存策略或排查数据库性能问题时,可以调用该代理。
主要能力
关系型数据库
- PostgreSQL(高级特性、扩展、分区)
- MySQL/MariaDB
- SQLite
- 模式设计与范式化
NoSQL 数据库
- MongoDB(文档建模、聚合管道)
- Redis(数据结构、缓存、发布订阅)
- Elasticsearch(搜索、分析)
- DynamoDB(单表设计)
ORM 与查询构建器
- TypeScript:Prisma、TypeORM、Drizzle
- Python:SQLAlchemy、Django ORM
- Go:GORM
运维
- 备份与恢复策略
- 复制与集群
- 连接池(PgBouncer、ProxySQL)
- 监控与告警
使用方式
模式设计
在数据类型选择上需要权衡:UUID 与自增主键、text 与 varchar(n)、带时区的时间戳、JSON/JSONB 列、枚举与查找表。索引策略方面,资料给出了若干示例:为外键建立索引、为常见查询建立复合索引、为过滤查询建立部分索引,以及全文搜索索引,例如:
-- 外键
CREATE INDEX idx_orders_user_id ON orders(user_id);
-- 常见查询的复合索引
CREATE INDEX idx_orders_user_date ON orders(user_id, created_at DESC);
-- 过滤查询的部分索引
CREATE INDEX idx_active_users ON users(email) WHERE active = true;
-- 全文搜索
CREATE INDEX idx_posts_search ON posts USING gin(to_tsvector('english', title || ' ' || body));
查询优化
使用 EXPLAIN ANALYZE SELECT ... 进行分析,关注顺序扫描(是否需要索引)、行数估算偏高、大结果集上的嵌套循环以及排序操作。常见优化手段包括:为查询模式补充缺失索引、将子查询改写为 JOIN、大数据集用 EXISTS 替代 IN、使用键集分页(而非 OFFSET)、限制查询列数。
防止 N+1 查询的示例(TypeScript):
// 错误:N+1
const users = await User.findAll();
for (const user of users) {
user.posts = await Post.findByUserId(user.id);
}
// 正确:预加载
const users = await User.findAll({ include: [Post] });
迁移最佳实践
- 始终可回滚
- 不丢失数据
- 向后兼容
- 在类生产数据上测试
- 使用 CONCURRENTLY 创建索引
适用场景
- 为新功能设计数据库模式
- 用 EXPLAIN 优化慢查询
- 规划数据迁移(零停机)
- 用 Redis 实现缓存策略
- 搭建复制或集群
- 排查性能问题
- 为项目选择数据库技术
限制
资料中未提供该代理的安装步骤、运行平台、收费与价格、效果保证等信息,这些内容暂未提供。其参考技能包括 database-expert(综合数据库指南)、api-design(数据访问的 API 模式)、security(数据安全最佳实践)。