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;
  • 但这个也会有个弊端,因为数据量是一直在增加的,到后面的时候可能这个前缀长度可能就不够了,所以会有需要再次维护的情况,所以最好还是在最开始的时候就限定好字段的长度,但是使用前缀可以更省空间,这也是一个优势
相关推荐
DolphinDB智臾科技2 分钟前
直播回顾 | 物联网时序数据库如何驱动电力场景智能调度?
数据库·物联网·时序数据库
FinTech老王5 分钟前
告别“sql_mode“噩梦:MySQL 8.0 vs 5.7兼容性全对比与升级避坑指南
android·sql·mysql
郝学胜-神的一滴7 分钟前
解锁CS数据存储的核心逻辑:从结构选择到表单设计的全解析
linux·服务器·数据库·c++·后端·oracle
qq_391105347 分钟前
TDengine C# 连接示例和授权管理
大数据·数据库·c#·时序数据库·tdengine
孟章豪9 分钟前
如何优雅封装.NET数据库访问层(彻底告别拼接SQL)
数据库·sql·.net
zs宝来了11 分钟前
MySQL MVCC 实现原理:Undo Log 与 Read View
mysql·mvcc·read view·并发控制·undo log
geBR OTTE12 分钟前
Spring Boot中集成MyBatis操作数据库详细教程
数据库·spring boot·mybatis
2401_8401922712 分钟前
数据库连接池和java servlet
java·数据库·servlet
honortech16 分钟前
docker 配置 MySQL 主从数据库
数据库·mysql·docker
爬山算法17 分钟前
MongoDB(75)如何配置TLS/SSL加密?
数据库·mongodb·ssl