
当数据表行数增长时,未加索引的 where 查询可能严重拖慢响应速度;本文教你通过 laravel 迁移为关键字段(如 unique_id_farmer)快速添加数据库索引,将耗时从 20 秒降至毫秒级。
当数据表行数增长时,未加索引的 where 查询可能严重拖慢响应速度;本文教你通过 laravel 迁移为关键字段(如 unique_id_farmer)快速添加数据库索引,将耗时从 20 秒降至毫秒级。
在你描述的场景中,SELECT * FROM form_edit WHERE unique_id_farmer = 20220620175937762 查询耗时高达 20 秒,而表仅含约 1.5 万行——这明确指向缺失列索引问题。MySQL(及其他主流关系型数据库)在无索引情况下执行该查询时,需全表扫描(Full Table Scan),时间复杂度为 O(n),随着数据量增长,性能急剧下降。
解决方法非常直接:为 unique_id_farmer 字段创建数据库索引。Laravel 提供了简洁、可迁移的语法支持:
// 在新建或已存在的迁移文件中添加
Schema::table('form_edit', function (Blueprint $table) {
$table->index('unique_id_farmer'); // 普通索引(推荐用于高频查询字段)
});
若该字段业务上本就要求唯一性(例如作为农户唯一标识),更优方案是使用唯一索引,它既保证数据完整性,又自动创建高效索引:
Schema::table('form_edit', function (Blueprint $table) {
$table->unique('unique_id_farmer'); // 唯一约束 + 自动索引
});
✅ 执行步骤:
Laravel 13.2.0 是基于 PHP 8.3+ 的高性能框架,官方推荐通过 Composer 安装。它内置 AI SDK、JSON:API Resources 及原生向量搜索,支持属性驱动开发与队列路由,大幅提升开发效率。相比旧版,13.2.0 优化了缓存 TTL 管理与实时通信,无需 Redis 即可横向扩展。作为现代 Web 开发首选,它兼顾安全与极速体验,助您快速构建企业级应用。
- 创建新迁移:
php artisan make:migration add_index_to_form_edit_unique_id_farmer - 在
up()方法中写入上述索引语句 - 运行迁移:
php artisan migrate
⚠️ 注意事项:
- 索引会略微增加 INSERT/UPDATE 开销并占用额外磁盘空间,但对读多写少的查询场景(如本例)收益远大于成本;
- 若字段值重复率极高(如 status=1 占 90%),普通索引效果有限,需结合业务评估是否适合;
- 执行前建议先在测试环境验证,并对生产表做备份;
- 可通过
EXPLAIN SELECT * FROM form_edit WHERE unique_id_farmer = ...检查执行计划,确认type变为ref或const,且key显示对应索引名,即表示索引生效。
添加索引后,该查询通常可在 1–5 毫秒内完成,性能提升超 4000 倍。记住:索引不是“可选项”,而是高可用 Laravel 应用的数据基础设施标配。










