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;
  • 但这个也会有个弊端,因为数据量是一直在增加的,到后面的时候可能这个前缀长度可能就不够了,所以会有需要再次维护的情况,所以最好还是在最开始的时候就限定好字段的长度,但是使用前缀可以更省空间,这也是一个优势
相关推荐
PC2005-cloud10 分钟前
MySQL学习笔记:GTID 主从复制,从原理到实践,告别传统 Binlog+Position 的痛点
笔记·学习·mysql
太理摆烂哥26 分钟前
MySQL数据库基础
数据库·mysql
wuhuhuan37 分钟前
JMeter 连接数据库并取值(JDBC 实战)
数据库·jmeter
小羊没烦恼!1 小时前
OS X 上使用.NET开发应用程序
开发语言·前端·数据库·人工智能·c#·策略模式
Rain的Java大神之路1 小时前
[特殊字符]8年Java老兵转型AI Agent:90%的人挂在同一个坑,根本不用学Python!(万字实战复盘,建议收藏)
java·数据库·人工智能·后端·python·spring·ai编程
高级程序源2 小时前
springboot本地生活服务平台33399-计算机课程设计、毕业设计
vue.js·spring boot·python·mysql·小程序·flask·课程设计
码途行者2 小时前
缓存一致性难题:Redis 和数据库如何做到数据一致?
数据库·redis
SelectDB2 小时前
Doris VARIANT 速查:类型映射、建表写法、索引配置与常见注意点
大数据·数据库·数据分析
l1t2 小时前
几种数据库软件count(distinct)和count()from group by子查询性能测试
开发语言·数据库
夜雪一千2 小时前
如何在MySQL中实现字段级加密
android·数据库·mysql