mysql 索引前缀

需求:

  • 在创建索引的时候报错了 Specified key 'uniq_code' was too long; max key length is 767 bytes.

进程:

  • 查阅文档信息之后发现,索引创建是有长度限制的
  • 要解决这个问题有两个方案
    1 . 修正当前所需要创建索引的字段的长度比如原先是 varchar(200) 修正为 varchar(20), 但是这个行为可能会导致数据变更,这个需要先确认表中数据都是20以内的长度
    2 . 使用前缀索引,前缀索引就是取数据库里某一列的数据的前n 个字符来当索引,这个方案的关键在于怎么判定前缀的长度
  • 前缀的唯一比例最好和全列的唯一比例相近,越接近越好,查询语句如下
sql 复制代码
#获取全列的比例
SELECT COUNT(DISTINCT column) / COUNT(*) FROM table;
#获取前缀的比例
SELECT COUNT(DISTINCT LEFT(column, 19)) / COUNT(*) FROM table;
  • 但这个也会有个弊端,因为数据量是一直在增加的,到后面的时候可能这个前缀长度可能就不够了,所以会有需要再次维护的情况,所以最好还是在最开始的时候就限定好字段的长度,但是使用前缀可以更省空间,这也是一个优势
相关推荐
wespaul1 小时前
VeapAI 自然语言操作实战|第 05 篇:向量与召回——从知识条目到可检索资产
大数据·数据库·人工智能·milvus
一只鹿鹿鹿6 小时前
政务外网整体设计方案(PPT)
大数据·数据库·web安全·系统安全·流程图·政务
2603_965148116 小时前
社区与学习资源:从入门到精通的API选品学习路径
数据库·人工智能·python·学习·数据挖掘
for_ever_love__6 小时前
MySQL ORDER BY 排序优化:从 Using filesort 到索引有序扫描(含双路 / 单路排序原理)
java·mysql·优化·存储·by·order·filesort
AI砖家6 小时前
安全进入 Agent Loop:2027 年 Coding Agent 的决胜点
数据库·安全·codex·vibecoding
wangqiaowq7 小时前
SQL server C盘空间占满的处理
数据库·sql
文人sec7 小时前
SQL基础入门笔记 | 从零基础到掌握核心查询语句
数据库·笔记·sql
数字新视界7 小时前
机房动环监控提升运维效率
大数据·服务器·数据库·动环监控系统·动力与环境监控系统
SelectDB技术团队7 小时前
冷热分层从建到验:Storage Policy 创建、表级与分区级绑定、SHOW TABLETS 验证的完整命令
大数据·数据库·elasticsearch·搜索引擎·数据分析·apache doris·冷热分层
lambo mercy9 小时前
Day3:结构化输出
java·数据库·oracle