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;
  • 但这个也会有个弊端,因为数据量是一直在增加的,到后面的时候可能这个前缀长度可能就不够了,所以会有需要再次维护的情况,所以最好还是在最开始的时候就限定好字段的长度,但是使用前缀可以更省空间,这也是一个优势
相关推荐
m0_74035242几秒前
网页如何运行html
jvm·数据库·python
2301_775639891 分钟前
mysql大表数据清理的利器_使用表分区按天删除数据
jvm·数据库·python
dblens 数据库管理和开发工具2 分钟前
DBLens for PostgreSQL 正式发布|把 PostgreSQL 开发与管理带进 AI + Agent 时代
数据库·人工智能·postgresql
byoass2 分钟前
文件版本管理的设计与实现:解决协同编辑丢数据的核心方案
前端·javascript·网络·数据库·安全·云计算
m0_684501985 分钟前
Django 信号中为 ImageField 指定自定义保存路径的正确实践
jvm·数据库·python
2301_787312436 分钟前
Go 中自定义类型与基础类型的显式转换规则详解
jvm·数据库·python
qq_432703667 分钟前
CSS如何引入CSS预加载器配置_优化样式编译流程提升效率
jvm·数据库·python
2401_832365529 分钟前
如何用 FormData 配合 Fetch 实现无刷新的多文件上传
jvm·数据库·python
2401_8714928512 分钟前
如何在网页中实现国际象棋棋子的拖拽与格点吸附功能
jvm·数据库·python
snow@li12 分钟前
数据库MySQL:常用语法 / MySQL 核心知识技能梳理
数据库·mysql