mysql的Innodb最大支持的索引长度是多少,以及索引长度怎么计算
今天正好有空,来讲个之前粉丝经常问的一个知识,就是mysql的Innodb最大支持的索引长度是多少?以及索引长度怎么计算?
一、mysql的innodb引擎,创建索引最大支持的长度是多少字节?
不墨迹,直接说答案:
在mysql8之前,索引最大长度为 767字节
在mysql8之后,索引最大长度为 3072字节
然后再建个简单的表,来验证一下
我使用的mysql 8的版本

建一张简单的student表,表结构如下图

然后,我创建一个长度大于3072字节的索引
比如我给 address 这个字段上添加索引,它会提示以下错误信息

提示 key was too long; max key length is 3072 bytes
意思是 你创建的索引超出长度,并且告诉你,最大支持的长度是 3072 bytes。
那我刚才想要创建的 address 这个索引,它具体的长度是多少呢?
只有知道它的长度是多少,才能确定它是不是真的超过 3072字节
想要知道 varchar(1500) 长度是多少个字节,需要知道下面这个经常被问到的问题:
varchar(255),里的这个255是255个字节?还是255个字符???
二、varchar(255),里的这个255是255个字节?还是255个字符?
这个255是代表255个字节?还是255个字符?
不墨迹,直接说答案:
mysql5.0之前是255个字节
mysql5.0之后是255个字符
所以上边那个问题就可以知道答案了:
因为,我使用的mysql版本是8,是属于5.0之后的版本,所以 varchar(1500) 就表示1500个字符
又因为创建这个字段的时候,使用的是 utf8mb4 表示一个字符4个字节
所以 1500 x 4 = 6000 字节,6000字节 > 3072字节,所以上边创建这个 address 索引时,就报长度过长的错误。
下面再改一下 address 这个字段的长度,把它的长度改到小于3072,然后再来创建这个索引,试一下,看是否可以成功
好,把address 改成 varchar(768) 了

再试下,创建索引

看到没,创建成功了,因为 768 x 4 = 3072
可以再给它加1,改成769,再试一下,又报错了。


还有个小知识点需要知道,就是 mysql建表的时候,经常使用的字符串类型是varchar
创建varchar 这种数据类型时,常用的字符集有 utf8mb4 和 utf8

看到没,就上图这俩,utf8mb4 和 utf8
utf8mb4刚才说了,它的每个字符是占4个字节
那utf8呢?它的每个字符占几个字节?
其实 utf8 就是 utf8mb3,从名字也能知道,它的每个字符是占3个字节
uft8,在 V8.0 还是指代的utf8mb3,据说未来的会变为uft8mb4,不过只是据说,还暂未确定
三、你创建的索引,这个索引的长度怎么计算?
既然都说到这了,那下面继续把mysql中 索引长度的计算一起说一下吧
mysql中普通索引的长度,非常好计算,普通索引的长度就是创建这个字段时,这个字段类型的长度,下面列出了常见的数据类型的长度
-
数值类型
-
tinyint:1字节
-
small int:2字节
-
medium int:3字节
-
int:4字节
-
bigint:8字节
-
-
时间类型
-
date:3字节
-
timestamp:4字节
-
datetime:8字节
-
除了上边常用的几种类型外,char和varchar也很常用
-
char(n):括号里的n是几,就代表几个字节
-
varchar(n):如果你用的是utf8也就是utf8mb3,那长度是3n+2;如果你用的是utf8mb4,那长度是4n+2;加2是因为 需要2字节存储字符串长度。
-
还有就是,如果建表的时候 字段允许是null,需要1个字节记录是否可以为null,如果允许为null,则需要 加 1 个字节存储;如果不允许null,则不需要加1个字节
知道了这些之后,就可以计算索引的长度了。
普通单列索引的长度就是,你添加索引的这个字段列的数据类型的字节长度
联合索引的长度就是,你联合的这几个字段列的数据类型的字节长度相加。
下面,可以使用mysql中的 explain 执行计划,来验证一下
1、普通单列索引长度的验证
首先,先给 age这个字段加个普通单列索引

并且,如下图,我在建表的时候,这个age用的是int类型的,int类型的长度大小是4字节
并且 允许为null,所以验证期望的结果长度应该是 4 + 1 = 5 字节

查询验证一下

上图可以看到,查询的走了 idx_age这个索引,而且explain中显示 的key_len为5
我把那个允许null,改成不允许null,再试一下

看到没,改成不允许null后,key_len变成4了
2、多列联合索引长度的验证
首先,先给这个表添加一个联合索引,idx_name_age 联合的是name和age这2列

然后再确认一下 name和age这两列的数据类型

上图,可以看到,name是varchar类型的,为了计算方便,我把它的varchar长度给的是100
age使用的是int类型并且这两列都不允许null
具体的计算过程:
name用的是varchar(100) utf8mb4,而且不允许null,所以 name的索引长度 (4x100) +2 = 402
age 用的是int,int的长度是4字节,所以 age的索引长度是4
所以,咱们的预期是,最后idx_name_age 这个联合索引的长度是两者相加,402 + 4 = 406
好,下面 使用 explain 查询验证一下

可以看到结果跟咱们预期的一样:走了 idx_name_age 这个联合索引,并且idx_name_age联合索引的长度是406,和咱们预期的结果一样。
ok,今天就写这么多吧
纯手敲 原创不易,如果觉得对你有帮助,可以关注一下,打赏一下,感谢

相关文章:
mysql的Innodb最大支持的索引长度是多少,以及索引长度怎么计算
今天正好有空,来讲个之前粉丝经常问的一个知识,就是mysql的Innodb最大支持的索引长度是多少?以及索引长度怎么计算? 一、mysql的innodb引擎,创建索引最大支持的长度是多少字节? 不墨迹,直接说…...
Android Compose: `remember` 与 `ViewModel` 保存数据的优缺点对比
在开发 Android 应用时,管理 UI 状态是一个不可避免的话题。Jetpack Compose 提供了两种常见的方式来保存和管理数据:remember 和 ViewModel。它们各有优缺点,适用于不同的场景。 本文将详细对比这两者在保存数据时的优缺点,帮助…...
vue3+vite模式下修改pinia的stroe初始值不进行热HMR更新解析
原因: import { defineStore } from pinia interface CounterState {count: number;name: string; } export const useCounterStore defineStore(counter, {state: () > ({ count: 10, name: Eduardo }),getters: {doubleCount: (state:CounterState) > st…...
【一句话经验】ubuntu vi/vim 模式自动设置为paste
从centos过来,发现ubutun有些地方不习惯,尤其是vi的粘贴,默认自动进去了代码模式,导致每次粘贴必须得set paste,否则会出现问题。 解决办法非常简单,按照下面命令执行即可: cd ~ echo "…...
[杂学笔记] TCP和UDP的区别,对http接口解释 , Cookie和Session的区别 ,http和https的区别 , 智能指针 ,断点续传
文章目录 1. TCP和UDP的区别2. 对http接口解释3. Cookie和Session的区别4. http和https的区别5. 智能指针6.断点续传 1. TCP和UDP的区别 tcp的特点: 面向连接,可靠性高,全双工,面向字节流udp特点:无连接,不…...
训练大模型LLM选择哪种开发语言最好
训练大型语言模型(LLM)时,选择合适的编程语言主要取决于效率、生态支持、开发便利性以及特定需求(如性能优化或硬件适配)。以下是常见语言的分析和推荐: --- 1. Python(首选语言) 优…...
Jupyter Notebook 全平台安装与配置教程(附Python/Anaconda双方案)
一、软件定位与特性 Jupyter Notebook 是交互式编程与数据科学分析工具,支持 40 编程语言,其基于浏览器的「代码块可视化」工作流,已成为机器学习、数据清洗、学术研究的标准环境。核心优势包括: 实时执行代码片段并保存结果支持…...
AutoDL平台租借GPU,创建transformers环境,使用VSCode SSH登录
AutoDL平台租借GPU,创建transformers环境,使用VSCode SSH登录 一、AutoDl平台租用GPU 1.注册并登录AutoDl官网:https://www.autodl.com/home 2.选择算力市场,找到需要的GPU: 我这里选择3090显卡 3.这里我们就选择P…...
【Java篇】行云流水,似风分岔:编程结构中的自然法则
文章目录 Java 程序逻辑控制:顺序、分支与循环结构全面解析一、顺序结构二、分支结构2.1 if 语句2.1.1 基本语法2.1.2 if-else 语句2.1.3 if-else if-else 语句 2.2 switch 语句 三、循环结构3.1 while 循环3.2 break 语句3.3 continue 语句3.4 for 循环 四、输入输…...
2.4 基于Vitest的单元测试基础设施搭建
文章目录 1. 现代单元测试体系解析测试金字塔演进Vitest核心定位2. 基础设施架构设计整体架构图3. 环境配置全流程3.1 基础环境搭建3.2 配置文件`vitest.config.ts`3.3 测试环境初始化4. 测试用例编写规范4.1 基础测试示例4.2 Vue组件测试4.3 异步逻辑测试5. Mock策略深度优化5…...
SqlSugar 进阶之原生Sql操作与存储过程写法 【ORM框架】
系列文章目录 🎀🎀🎀 .NET开源 ORM 框架 SqlSugar 系列 🎀🎀🎀 文章目录 系列文章目录一、前言 🍃二、用法介绍三、方法列表四、使用案例五、调用存储过程六、in参数用法七、SqlServer带Go的脚…...
Navicat Premium(数据库管理工具) v17.1.13 中文 Windows
介绍 Navicat Premium 是一款多功能的数据库管理工具,可以连接并管理主流的数据库系统,如MySQL、PostgreSQL、Oracle、SQL Server等。它提供了丰富的功能和强大的工具,可以帮助用户轻松地管理数据库,进行数据导入导出、查询、备份…...
IDEA(十一)调整新版本的工具栏显示Git操作(pull、commit、push、revert等)
目录 一、背景二、操作步骤2.1 开启新 UI 样式2.2 设置 Tool Window 工具栏 一、背景 好久没有更新 IDEA 了,更新之后发现 IDEA 的工具栏消失了。一番操作之后,终于把 IDEA 的工具栏的设置调整好了,在此进行记录调整步骤,供大家学…...
QoS质量配置
他们祝你挺拔,再挺拔一点;我只祝你,永远年少,永远一骑当先. 1. QoS的概念 QoS(服务质量)是指一个网络能够利用各种各样的基础技术向选定的网络通信提供更好 的服务的能力。这些基础技术包括:帧中继(FrameR…...
2024年群智能SCI1区TOP:混沌可行性恢复粒子群算法CEPSO,深度解析+性能实测
目录 1.摘要2.改进策略3.结果展示4.参考文献5.代码获取 1.摘要 本文研究了解决二阶段非线性固定费用运输问题(Two-stage NFCTP),该问题的特点是每条运输弧线都与固定费用和与运输量的平方成正比的变量费用相关联。由于涉及固定费用和非线性组…...
ORACLE EBS数据库RELINK方式搭建克隆环境
ORACLE EBS系统的数据库,一般都安装了很多特定功能的小补丁来解决特定的BUG;因此对于已经安装好的系统,想要克隆一套测试环境、搭建一个新的备机做测试等,如果按照生产环境标准,则需要安装大量补丁,带来很大…...
第十五届蓝桥杯省赛电子类单片机学习过程记录(客观题)
客观试题: 01.典型的BUCK电源电路包含哪些关键器件(ABCD) A. 电容 B. 二极管 C. 电感 D. MOSFET 解析: 典型的 BUCK 电源电路是一种降压型的直流-直流转换电路,它包含以下关键器件: A.电容:电容在电路中起到滤波的作用。输入电容用于平滑输入电压的波动,减少电源噪声对…...
使用 invideo ai 实现文生视频
https://ai.invideo.io 然后选ai生成视频 输入描述,点击生成 就可以得到视频了,可以下载...
5G技术与物联网融合:未来智慧城市的基石
一、智慧城市演进:从概念到落地的技术革命 1.1 全球智慧城市发展现状 2023年全球智慧城市市场规模突破$1.2万亿美元,中国以35%的占比领跑市场(数据来源:IDC)。典型应用成效: 交通效率:新加坡…...
蓝桥杯备赛-差分-重新排序
问题描述 给定一个数组 AA 和一些查询 Li,RiLi,Ri, 求数组中第 LiLi 至第 RiRi 个元素之和。 小蓝觉得这个问题很无聊, 于是他想重新排列一下数组, 使得最终每个查 询结果的和尽可能地大。小蓝想知道相比原数组, 所有查询结果的总和最多可 以增加多少? 输入格式 输…...
利用最小二乘法找圆心和半径
#include <iostream> #include <vector> #include <cmath> #include <Eigen/Dense> // 需安装Eigen库用于矩阵运算 // 定义点结构 struct Point { double x, y; Point(double x_, double y_) : x(x_), y(y_) {} }; // 最小二乘法求圆心和半径 …...
【Python】 -- 趣味代码 - 小恐龙游戏
文章目录 文章目录 00 小恐龙游戏程序设计框架代码结构和功能游戏流程总结01 小恐龙游戏程序设计02 百度网盘地址00 小恐龙游戏程序设计框架 这段代码是一个基于 Pygame 的简易跑酷游戏的完整实现,玩家控制一个角色(龙)躲避障碍物(仙人掌和乌鸦)。以下是代码的详细介绍:…...
抖音增长新引擎:品融电商,一站式全案代运营领跑者
抖音增长新引擎:品融电商,一站式全案代运营领跑者 在抖音这个日活超7亿的流量汪洋中,品牌如何破浪前行?自建团队成本高、效果难控;碎片化运营又难成合力——这正是许多企业面临的增长困局。品融电商以「抖音全案代运营…...
定时器任务——若依源码分析
分析util包下面的工具类schedule utils: ScheduleUtils 是若依中用于与 Quartz 框架交互的工具类,封装了定时任务的 创建、更新、暂停、删除等核心逻辑。 createScheduleJob createScheduleJob 用于将任务注册到 Quartz,先构建任务的 JobD…...
转转集团旗下首家二手多品类循环仓店“超级转转”开业
6月9日,国内领先的循环经济企业转转集团旗下首家二手多品类循环仓店“超级转转”正式开业。 转转集团创始人兼CEO黄炜、转转循环时尚发起人朱珠、转转集团COO兼红布林CEO胡伟琨、王府井集团副总裁祝捷等出席了开业剪彩仪式。 据「TMT星球」了解,“超级…...
对WWDC 2025 Keynote 内容的预测
借助我们以往对苹果公司发展路径的深入研究经验,以及大语言模型的分析能力,我们系统梳理了多年来苹果 WWDC 主题演讲的规律。在 WWDC 2025 即将揭幕之际,我们让 ChatGPT 对今年的 Keynote 内容进行了一个初步预测,聊作存档。等到明…...
spring:实例工厂方法获取bean
spring处理使用静态工厂方法获取bean实例,也可以通过实例工厂方法获取bean实例。 实例工厂方法步骤如下: 定义实例工厂类(Java代码),定义实例工厂(xml),定义调用实例工厂ÿ…...
【HTTP三个基础问题】
面试官您好!HTTP是超文本传输协议,是互联网上客户端和服务器之间传输超文本数据(比如文字、图片、音频、视频等)的核心协议,当前互联网应用最广泛的版本是HTTP1.1,它基于经典的C/S模型,也就是客…...
Web 架构之 CDN 加速原理与落地实践
文章目录 一、思维导图二、正文内容(一)CDN 基础概念1. 定义2. 组成部分 (二)CDN 加速原理1. 请求路由2. 内容缓存3. 内容更新 (三)CDN 落地实践1. 选择 CDN 服务商2. 配置 CDN3. 集成到 Web 架构 …...
Reasoning over Uncertain Text by Generative Large Language Models
https://ojs.aaai.org/index.php/AAAI/article/view/34674/36829https://ojs.aaai.org/index.php/AAAI/article/view/34674/36829 1. 概述 文本中的不确定性在许多语境中传达,从日常对话到特定领域的文档(例如医学文档)(Heritage 2013;Landmark、Gulbrandsen 和 Svenevei…...
