SuperAPI AI 工具集

laravel-database-optimization

编程与开发

查看项目

更新于 10-13 21:59

技能介绍

Laravel Database Optimization 是一套面向 Laravel 13 应用的数据库优化规则集合,隶属于 asyrafhussin/agent-skills 技能仓库。技能版本为 1.1.0,面向 Laravel 13.x 框架与 PHP 8.3+ 环境,共包含 9 个类别、33 条规则,用于编写高性能的数据库查询、合理建立索引、高效使用缓存、遵循命名规范,以及调试 Laravel 13 中的慢查询。

【用途与适用场景】 该技能在以下场景中提供参考:编写 Eloquent 查询或使用查询构建器;诊断并修复 N+1 查询问题;在迁移中添加数据库索引;实现基于 Redis 或缓存的优化;分页或处理大型数据集;将操作包裹在数据库事务中;为生产数据库创建或修改迁移;使用 EXPLAIN 或 Laravel Debugbar 调试慢查询。

【规则分类与优先级】 规则按优先级划分为三档,并以固定前缀组织:

  1. 查询性能与 N+1(CRITICAL,前缀 query-):包括 query-eager-loading(用预加载消除 N+1)、query-prevent-lazy-loading(开发环境禁止延迟加载)、query-auto-eager-loading(为模型配置自动预加载)、query-select-columns(只选择所需列而非 SELECT *)。
  2. 索引策略(CRITICAL,前缀 index-):包括 index-foreign-keys(为所有外键列建索引)、index-composite-indexes(为多列查询建复合索引)、index-covering-indexes(读多场景使用覆盖索引)、index-full-text(搜索功能使用全文索引)。
  3. Eloquent 优化(HIGH,前缀 eloquent-):包括 eloquent-query-builder-hot-paths(性能关键路径使用查询构建器)、eloquent-with-count-aggregates(用 withCount 代替加载关联来计数)、eloquent-subquery-selects(用子查询选择避免额外查询)、eloquent-where-has-optimization(用 whereIn 子查询优化 whereHas)。
  4. Redis 缓存(HIGH,前缀 cache-):包括 cache-remember(用 Cache::remember 缓存昂贵查询)、cache-invalidation(模型变更时使缓存失效)、cache-tags(用缓存标签做分组失效)、cache-ttl(为缓存数据设置合适的 TTL)。
  5. 分页与大型数据集(HIGH,前缀 data-):包括 data-cursor-pagination(大数据集使用游标分页)、data-chunk-by-id(用 chunkById 处理大数据集)、data-cursor-iteration(用惰性游标做内存友好迭代)、data-avoid-unbounded(大表上避免无界查询)。
  6. 事务与锁(HIGH,前缀 lock-):包括 lock-short-transactions(保持事务简短聚焦)、lock-deadlock-retry(实现死锁重试逻辑)、lock-pessimistic-locking(关键更新使用悲观锁)。
  7. 迁移(HIGH,前缀 migrate-):包括 migrate-zero-downtime(编写零停机迁移)、migrate-concurrent-indexes(在生产环境并发创建索引)、migrate-safe-column-additions(安全添加列而不锁表)。
  8. 查询调试(MEDIUM,前缀 debug-):包括 debug-explain-analyze(用 EXPLAIN ANALYZE 理解查询计划)、debug-laravel-debugbar(用 Laravel Debugbar 定位查询瓶颈)、debug-slow-query-log(启用并监控慢查询日志)。
  9. 命名与结构(HIGH,前缀 naming-):包括 naming-tables(表命名规范:复数 snake_case、中间表按字母序)、naming-columns(列命名规范:外键、布尔、时间戳、多态)、naming-relationships(关联方法命名:单复数匹配)、naming-migrations(迁移与索引命名规范)。

【核心模式示例】 资料中提供了若干关键代码示例:

  • 在 AppServiceProvider::boot 中调用 Model::preventLazyLoading(!app()->isProduction()),在非生产环境禁止延迟加载。
  • 使用 Cache::remember('posts:popular', 3600, fn () => Post::query()->withCount('comments')->orderByDesc('comments_count')->take(10)->get()) 缓存热门文章查询。
  • 使用 Post::query()->where('published_at', '<=', now())->orderByDesc('published_at')->cursorPaginate(15) 实现游标分页。
  • 使用 User::withCount('posts')->get() 聚合计数而不加载关联。
  • 使用 User::query()->where('last_login_at', '<', now()->subYear())->chunkById(1000, function ($users) { ... }) 分批处理大数据集。
  • 使用 DB::transaction() 包裹短事务,创建订单、批量创建订单项并扣减用户积分。

【使用方式】 资料说明可阅读各规则文件获取详细解释与代码示例,例如 rules/query-eager-loading.md、rules/index-composite-indexes.md、rules/cache-remember.md、rules/_sections.md。每个规则文件包含:带元数据(标题、影响、标签)的 YAML frontmatter、简短说明、带解释的错误示例、带解释的正确示例,以及 Laravel 13 与 PHP 8.3 相关的上下文与参考。完整编译文档见 AGENTS.md。

【参考链接】 资料列出 Laravel 官方文档作为参考,涵盖 Eloquent、Queries、Cache、Pagination、Migrations、Redis 等主题。

【限制说明】 资料未提供该技能的收费、价格、平台限制或安装命令等信息,这些内容暂未提供。