Navicat中建普通索引必须进入“设计表”界面而非“模型设计”,右键目标表→设计表→切换至索引页→点新增,配置索引名、字段顺序(须匹配WHERE/ORDER BY)、排序方式及BTREE方法,并用EXPLAIN验证生效。
Navicat 里“模型设计”不建索引,得进“设计表”
navicat 的「模型设计」(model)功能只管逻辑结构:表名、字段、主键、外键、注释、er 关系图——它不生成物理索引。想建普通索引,必须切换到具体表的 设计表 界面。很多人卡在这一步,以为在模型里拖完字段就完了,结果执行计划里 key 还是空的。
右键表 → 设计表 → 索引页:三步定位入口
操作路径很固定,但容易点错位置:
- 不是右键数据库或模式,而是右键**目标数据表本身**(比如
users) - 选
设计表,不是“打开表”或“查看数据” - 顶部标签页切到
索引,不是“字段”或“外键”
进去后你会看到已有索引列表(含主键),点 新增 才能开始建普通索引。
普通索引(NORMAL)的关键配置项
NORMAL 是默认类型,但光选它不够,下面几项漏一个都可能让索引失效:
-
索引名:建议带前缀,比如idx_user_status_created,避免日后混淆 -
字段:点击右侧…按钮多选,顺序不能乱——WHERE a = ? AND b > ?就该先选a再选b -
排序方式:MySQL 默认ASC,范围查询(>、BETWEEN)和ORDER BY方向要一致;别盲目全设DESC -
索引方法:MySQL 下选BTREE(绝大多数场景唯一合理选择),HASH仅适用于等值查询且引擎支持(如 MEMORY),别乱试
示例:为 orders 表加速 WHERE shop_id = ? AND status = ? ORDER BY created_at DESC,索引字段顺序必须是 shop_id → status → created_at,排序方式对应设为 ASC、ASC、DESC。
建完不生效?先看执行计划里这三处
保存后立刻用 EXPLAIN 验证,别凭感觉。重点关注:
-
type是ALL或index?说明没走有效索引 -
key为空,但possible_keys有你的索引名?大概率是字段顺序/类型/函数包裹问题 -
rows接近表总行数?说明优化器判定索引选择性太差,或者统计信息过期(可运行ANALYZE TABLE orders更新)
TEXT 字段加索引必须填前缀长度,比如 content(191),否则 Navicat 会静默失败或报错;INT 字段写成字符串条件(WHERE user_id = '123')也会触发隐式转换,让索引失效。











