Laravel框架数据库索引怎么建_Laravel框架查询提速方法【教程】
Laravel建索引需关注WHERE、JOIN高频字段及外键、deleted_at手动加索引。联合索引按最左匹配设计,字符串字段控制前缀长度。加索引后用EXPLAIN验证是否生效,避免冗余并优化查询效率。
加索引不等于查询变快,关键要加在WHERE、JOIN、ORDER BY、GROUP BY高频字段(如user_id、status、created_at),外键和softDeletes字段需手动加索引;联合索引须按最左匹配原则设计顺序;字符串字段须控制前缀长度(如->length(191));必须用EXPLAIN验证索引是否生效。

直接加索引不等于查询变快,关键得加对地方、用对方式。Lara vel 迁移里写 $table->index('user_id') 很容易,但线上慢查没解决,大概率是索引没命中、顺序错了,或者字段本身不适合建索引。
WHERE 条件里的字段不加索引,基本等于裸奔
经常碰到的情况:SELECT * FROM orders WHERE user_id = 123 执行要 2 秒,EXPLAIN 显示 type: ALL(全表扫描);或者分页查 WHERE status = 'shipped' ORDER BY created_at DESC 卡顿,却只给 status 加了单列索引。
- 真正该加索引的字段:出现在
WHERE、JOIN ON、ORDER BY、GROUP BY中的列,比如user_id、status、created_at - 外键字段(如
user_id)几乎必须加索引 —— Lara vel 的foreignId()不会自动加,得手动补->index() softDeletes()字段(deleted_at)如果常用于筛选(如whereNull('deleted_at')),也建议加索引
联合索引字段顺序错了,索引就废了一半
常见错误:建了 ['status', 'created_at'] 索引,但查询是 WHERE created_at > '2025-01-01' AND status = 'paid',EXPLAIN 显示没走索引;或者 ORDER BY created_at DESC 没生效,还是 Using filesort。
- 联合索引遵循最左匹配原则:查询条件必须从左到右连续命中,才能充分利用索引
- 高频等值查询字段放前面(如
user_id),范围查询或排序字段放后面(如created_at) - 正确示例:
$table->index(['user_id', 'created_at'], 'orders_user_created_idx')→ 支持WHERE user_id = ?、WHERE user_id = ? ORDER BY created_at - 错误示例:
$table->index(['created_at', 'user_id'])→WHERE user_id = ?基本不走索引
字符串字段不控前缀长度,MySQL 直接静默失效
这个问题很隐蔽:本地开发加了 $table->string('description')->index(),上线后 EXPLAIN 发现没用上;或者迁移报错 Specified key was too long。
- Lara vel 9+ 默认字符集是
utf8mb4,VARCHAR(255)实际最多占 1020 字节,而 MySQL InnoDB 单索引默认上限是 767 字节(老版本)或 3072 字节(5.7+ 启用innodb_large_prefix) - 必须显式控制前缀长度:
$table->string('description', 500)->index()->length(191) - 索引名建议显式指定:
$table->index('email', 'users_email_idx'),否则 Lara vel 自动生成的名字(如users_email_index)在多环境删索引时容易混淆 fullText()仅适用于 MySQL MyISAM 或 InnoDB(8.0+),且需确保引擎和字符集支持
JSON 字段不能直接索引,得靠生成列或函数索引
另一个容易踩的坑:用 whereJsonContains('meta->tags', 'lara vel') 查得很慢,EXPLAIN 显示全表扫描;或者迁移里直接写 $table->index('meta') 报错。
- MySQL 不支持对 JSON 类型字段整体建 B-Tree 索引,必须提取具体路径值
- 推荐方案(MySQL 5.7+):建虚拟生成列 + 索引:
$table->json('meta'); $table->string('meta_status')->virtualAs("JSON_UNQUOTE(JSON_EXTRACT(`meta`, '$.status'))")->index(); - MySQL 8.0+ 可用函数索引:
DB::statement("CREATE INDEX idx_users_meta_name ON users((JSON_EXTRACT(meta, '$.name')));") - 注意:函数索引名不能用 Lara vel 原生方法生成,必须用
DB::statement()手动执行
最常被忽略的一点:加完索引不验证是否真被用上。别只看迁移跑成功了,一定要在生产库上用 EXPLAIN 对照真实查询语句跑一遍,尤其关注 key、rows、Extra 字段。索引不是加得越多越好,写入变慢、空间浪费、优化器选错索引,都是真实代价。
Shapr3D是一款面向工业设计、机械工程、建筑概念和三维打印工作流的CAD软件。Mac版采用Parasolid建模内核,支持草图约束、实体建模、工程图、可视化渲染及常见CAD格式交换,并可通过账户在多台设备之间同步项目。
REAPER是Cockos开发的数字音频工作站,提供多轨音频与MIDI录制、剪辑、处理、混音和母带制作工具。Mac版兼容Intel与Apple芯片,支持AU、VST、VST3、CLAP等插件格式,并提供高度可定制的工作流程。
Ableton Live 是面向音乐制作人与现场表演者的数字音频工作站,提供编曲视图、独具特色的现场视图、音频录制、MIDI创作、实时变速、乐器及效果器。Mac版原生支持Apple芯片,并可连接音频接口、MIDI控制器和第三方插件。
Photoshop 2026 是 Adobe 推出的专业图像处理与视觉设计软件,支持 Windows、macOS 和 iPad 等平台,广泛应用于摄影修图、电商设计、平面海报、数字绘画及视觉合成等创作场景。
Blender 是一款免费开源、跨平台的专业 3D 创作软件,集建模、动画、渲染、视频编辑与视觉合成等功能于一体,广泛应用于影视动画、游戏设计和建筑可视化等领域。软件支持 Cycles 物理渲染器与 Eevee 实时渲染引擎,并提供多边形建模、骨骼绑定、物理模拟等专业工具。Blender 兼容 Windows、macOS 和 Linux 系统,安装包轻巧、运行流畅,依托活跃的全球开发者社区持续更新,是从初学者到专业创作者都值得选择的正版 3D 创作工具。














