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;
  • 但这个也会有个弊端,因为数据量是一直在增加的,到后面的时候可能这个前缀长度可能就不够了,所以会有需要再次维护的情况,所以最好还是在最开始的时候就限定好字段的长度,但是使用前缀可以更省空间,这也是一个优势
相关推荐
就叫飞六吧22 分钟前
mysql表字段反查表名脚本-筛选法-查表技巧
数据库·mysql
1.14(java)32 分钟前
MySQL数据库操作全攻略
java·数据库·mysql
jmxwzy34 分钟前
MySQL
数据库·mysql
自己的九又四分之三站台1 小时前
PostgreSQL:万物皆可PostgreSQL的力量
数据库·postgresql
一条大祥脚1 小时前
25.12.30
数据库·redis·缓存
雨中飘荡的记忆2 小时前
MyBatis SQL执行模块详解
数据库·sql·mybatis
飞Link2 小时前
【MySQL】Linux(CentOS7)下安装MySQL8教程
linux·数据库·mysql
数据库生产实战2 小时前
Oracle的_segment_count和3个event对高并发事务与索引性能的影响分析
数据库·oracle
程序员侠客行3 小时前
Mybatis二级缓存实现详解
java·数据库·后端·架构·mybatis
Tipriest_3 小时前
linux中的文本分接流tee命令介绍
linux·服务器·数据库