首页/数据/数据库速查/前缀索引(长字符串列)
本包目录(495 条)
MySQL 基础与连接36 条SQL 语法52 条用户与权限21 条备份与恢复56 条主从复制与高可用53 条
性能与调优57 条
Redis 命令96 条Redis 运维与场景124 条

前缀索引(长字符串列)

长字符串(URL/邮箱)为省空间取前 N 字符建索引:选择性接近全列即可;LIKE 'abc%' 可用,ORDER BY 前缀列通常不可用。

数据库速查数据更新于 2026-10-12

选择性评估与创建

选择性评估与创建
-- 估算不同前缀长度的区分度
SELECT COUNT(DISTINCT LEFT(url, 12))/COUNT(*) AS sel12,
       COUNT(DISTINCT LEFT(url, 20))/COUNT(*) AS sel20
FROM appdb.pages;
-- 建前缀索引
ALTER TABLE appdb.pages ADD INDEX idx_url (url(20));
收益索引体积小、可写性好
代价无法用于覆盖索引与部分排序
选择前缀长度让选择性接近全列即可(如 95%+)
前缀索引的 key_len 显示为前缀字节数,比对执行计划时注意。

易错点

  • 前缀太短(如 url(4)):区分度过低,大量回表还不如全列索引
  • 对唯一性要求高的列用前缀索引:无法保证唯一,需要业务层兜底

数据来源与参考

  • MySQL 8.0 Reference Manual: Index Prefixes

相关工具

​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌