Mysql中的 TEXT 和 BLOB 解析

在这里插入图片描述

🚀 博主介绍:大家好,我是无休居士!一枚任职于一线Top3互联网大厂的Java开发工程师! 🚀

🌟 在这里,你将找到通往Java技术大门的钥匙。作为一个爱敲代码技术人,我不仅热衷于探索一些框架源码和算法技巧奥秘,还乐于分享这些宝贵的知识和经验。

💡 无论你是刚刚踏入编程世界的新人,还是希望进一步提升自己的资深开发者,在这里都能找到适合你的内容。我们共同探讨技术难题,一起进步,携手度过互联网行业的每一个挑战

📣 如果你觉得我的文章对你有帮助,请不要吝啬你的点赞👍分享💕和评论哦! 让我们一起打造一个充满正能量的技术社区吧!


目录标题

    • `TEXT` 和 `BLOB` 数据类型
      • 1. `TEXT` 和 `BLOB` 数据类型
      • 2. InnoDB 存储 `TEXT` 和 `BLOB` 数据的方式
      • 3. 如何存储 `TEXT` 和 `BLOB`
      • 4. 行格式与 `TEXT` 和 `BLOB`
      • 5.总结
    • TEXT 和 BLOB 如何使用索引呢?
      • 1. 索引的基本限制
      • 2. 如何创建前缀索引
      • 3. 索引的前缀长度限制
      • 4. 使用 `FULLTEXT` 索引
      • 5. `TEXT` 和 `BLOB` 的索引优化
      • 6. 总结


在这里插入图片描述

TEXTBLOB 数据类型

InnoDB 表中可以存储 TEXTBLOB 类型的数据,它们都是用来存储大文本和二进制数据的类型。这些数据类型并不影响 InnoDB 使用的 行格式 存储方式。让我们详细看看 TEXTBLOB 数据类型在 InnoDB 表中的存储机制。

1. TEXTBLOB 数据类型

在 MySQL 中,TEXTBLOB 都是用于存储大量数据的字段类型:

  • TEXT:用于存储较长的字符串数据,可以存储最大 65,535 字符的文本数据。
  • BLOB:用于存储二进制数据,大小也是最大 65,535 字节,适用于存储非文本数据(如图片、音频、视频等)。

这些字段类型在 InnoDB 表中的存储方式稍微有些不同,特别是对于大数据量的存储。

2. InnoDB 存储 TEXTBLOB 数据的方式

  • 行格式(Row Storage):InnoDB 使用行格式来存储数据。对于表中的每一行,数据会以行的形式存储,所有的列值都会保存在一起。

  • 数据页:InnoDB 将表数据分成多个 数据页(一般为 16KB)。对于一个表中的普通列,数据会存储在同一行的同一个数据页中。而对于 TEXTBLOB 类型的列,如果数据比较小,它们通常也会直接存储在数据页中。如果数据比较大,InnoDB 会将这些大字段的数据存储在 溢出页(overflow pages)中,这些溢出页会与原始行数据分开存储。

3. 如何存储 TEXTBLOB

  • 小数据(小于 768 字节):如果 TEXTBLOB 的数据小于 768 字节,InnoDB 会把这些数据直接存储在行记录中(即存储在数据页内)。

  • 大数据(大于 768 字节):对于较大的 TEXTBLOB 数据,InnoDB 会将这些数据存储在单独的溢出页中,而原始行记录会保存一个指向这些溢出页的指针。这个机制叫做 外部存储(off-page storage),这种方式有效减少了行记录占用的空间。

4. 行格式与 TEXTBLOB

  • 在 InnoDB 中,即使你有 TEXTBLOB 字段,表仍然是以行格式存储的,只是当这些字段的数据较大时,它们的数据会被拆分开来,存储在不同的位置(溢出页)。因此,InnoDB 使用行格式存储所有类型的数据,TEXTBLOB 字段并不会改变这一点。

  • InnoDB 的 Compact Row FormatRedundant Row Format 都会按这种方式存储 TEXTBLOB 数据,只不过不同的行格式可能会影响如何分配数据页和存储数据的细节。

5.总结

  • InnoDB 表是行格式存储的,这适用于包括 TEXTBLOB 类型在内的所有数据列。
  • TEXTBLOB 列的数据存储方式与普通数据列不同——它们可能会存储在数据页内(如果数据较小),或者会被分配到**溢出页**中(如果数据较大)。
  • 行格式存储并不会影响 TEXTBLOB 的使用,它们依然是作为 InnoDB 行的一部分进行管理,只是它们的存储位置可能会有所不同。

因此,虽然你可以在 InnoDB 表中使用 TEXTBLOB 数据类型,但这并不改变表使用行格式存储的方式。

TEXT 和 BLOB 如何使用索引呢?

在 MySQL 中,TEXTBLOB 类型的数据可以用索引,但是由于这些数据类型的特殊性质,索引的使用有一些限制和注意事项。以下是关于如何在 TEXTBLOB 字段上使用索引的详细解释。

1. 索引的基本限制

  • 不能直接索引整个字段:由于 TEXTBLOB 类型字段可以包含大量数据,它们通常不适合作为索引的整个内容。因此,MySQL 不允许直接对整个 TEXTBLOB 列建立索引。
  • 索引前缀:你可以创建一个 前缀索引(Prefix Index),即只索引字段的前部分数据。这对于较长的 TEXTBLOB 字段特别有用,因为只需要索引前几个字符(或字节)即可提高查询效率,而不必索引整个内容。

2. 如何创建前缀索引

对于 TEXTBLOB 字段,你可以通过指定 前缀长度 来创建一个前缀索引。例如,如果你有一个 TEXT 字段,并且只希望索引其前 100 个字符,可以这样做:

CREATE TABLE example (id INT AUTO_INCREMENT PRIMARY KEY,description TEXT,INDEX (description(100))  -- 只索引前100个字符
);

这样,MySQL 会为 description 字段的前 100 个字符建立一个索引。如果你的字段是 BLOB 类型,前缀索引也是类似的:

CREATE TABLE example (id INT AUTO_INCREMENT PRIMARY KEY,data BLOB,INDEX (data(100))  -- 只索引前100个字节
);

3. 索引的前缀长度限制

  • 在 MySQL 中,前缀长度的最大值与存储引擎、字符集以及数据的存储方式密切相关。

    • InnoDB 引擎:如果是 TEXT 字段,并且使用 UTF-8 编码(每个字符最大 3 字节),你可能最多只能索引 767 字节。因此,如果你索引一个 UTF-8 编码的 TEXT 字段,你最多可以索引 767/3 ≈ 255 个字符。
    • MyISAM 引擎:对于 MyISAM 引擎的表,最大索引前缀长度通常是 1000 字节,因此对于 BLOB 类型字段,最多可以索引 1000 个字节。

    注意:对于 TEXTBLOB 字段,索引的前缀长度会受到最大索引长度(通常为 767 字节或 1000 字节)的限制,具体取决于你使用的字符集和存储引擎。

4. 使用 FULLTEXT 索引

对于大文本数据(如 TEXT 类型),如果你需要执行全文搜索,可以使用 FULLTEXT 索引FULLTEXT 索引专门用于文本数据的查找,允许你对 TEXTBLOB 字段进行更复杂的搜索操作。

FULLTEXT 索引的创建方式如下:

CREATE TABLE example (id INT AUTO_INCREMENT PRIMARY KEY,content TEXT,FULLTEXT (content)
);

然后,你可以使用 MATCHAGAINST 语句来执行全文搜索:

SELECT * FROM example
WHERE MATCH (content) AGAINST ('search term' IN NATURAL LANGUAGE MODE);

FULLTEXT 索引适用于较长的文本字段,支持更多的全文搜索功能,如 ANDORNOT 等搜索操作,但仅适用于 MyISAMInnoDB 存储引擎(MySQL 5.6 及以上版本开始支持 InnoDB 引擎的 FULLTEXT 索引)。

5. TEXTBLOB 的索引优化

  • 前缀索引:由于 TEXTBLOB 字段可能存储非常大的数据量,通常索引它们的前缀部分会带来性能优化,而不是尝试索引整个字段。你可以根据实际需要选择索引字段的前 N 个字符或字节。
  • FULLTEXT 索引:如果你的查询模式需要对文本字段进行复杂的搜索操作,FULLTEXT 索引是一个有效的选择,尤其是对于 TEXT 类型字段。

6. 总结

  • 前缀索引:对于 TEXTBLOB 类型,索引整个字段通常不现实,你可以通过 前缀索引 来索引字段的前一部分内容。这样可以有效地加速查询,尤其是在你只需要查找字段的前几个字符或字节时。
  • FULLTEXT 索引:对于长文本字段(如 TEXT),如果你需要执行全文搜索,可以使用 FULLTEXT 索引,它为大规模文本搜索提供了更强大的支持。
  • 索引大小限制:在创建前缀索引时要注意索引的大小限制,尤其是字符集和存储引擎的不同限制。

通过合理使用这些索引类型,你可以提高在 TEXTBLOB 字段上的查询性能,同时避免存储和性能上的问题。

乐于分享和输出干货的WXGZG:JavaPersons

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/477766.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

2024强网拟态决赛-eBeepf

漏洞分析与利用 分析后面看情况吧&#xff0c;有时间再写吧&#xff0c;先贴个利用脚本&#xff1a; #ifndef _GNU_SOURCE #define _GNU_SOURCE #endif#include <stdio.h> #include <unistd.h> #include <stdlib.h> #include <fcntl.h> #include <…

Duolingo「多邻国」v6.9.0 解锁Max高级版

前言 Duolingo是一个特别有名的学语言的应用软件&#xff0c;你可以用它来学西班牙语、法语、德语、意大利语、俄语等等好多种语言。当然&#xff0c;用它来学英语也是个不错的选择。 安装环境 [名称]&#xff1a;Duolingo「多邻国」 [大小]&#xff1a;79MB [版本]&#x…

鸿蒙开发-音视频

Media Kit 特点 一般场合的音视频处理&#xff0c;可以直接使用系统集成的Video组件&#xff0c;不过外观和功能自定义程度低Media kit&#xff1a;轻量媒体引擎&#xff0c;系统资源占用低支持音视频播放/录制&#xff0c;pipeline灵活拼装&#xff0c;插件化扩展source/demu…

基于SSM的婚庆管理系统+LW示例参考

1.项目介绍 系统角色&#xff1a;管理员、商家&#xff08;婚庆公司&#xff09;、用户功能模块&#xff1a;管理员&#xff08;用户管理、商家管理、摄影风格管理、礼服款式管理、案例管理、婚车品牌管理、婚纱拍摄管理、策划服务管理、婚宴酒店管理、婚车套餐管理、在线咨询…

manin动画编程(安装+入门)

文章目录 1.基本介绍2.效果展示3.安装步骤3.1安装manba软件3.2配置环境变量3.3查看是否成功3.4什么是mamba3.5创建虚拟环境3.6尝试进入虚拟环境 4.vscode操作4.1默认配置文件 5.安装ffmpeg6.安装manim软件6.vscode制作7.我的学习收获 1.基本介绍 这个manim就是一款软件&#x…

CH595 驱动数码管

先上原理图 我手里的是型号SR410361K的 4段数码管是共阳的&#xff08;低电平驱动&#xff09;&#xff0c;先发送数据&#xff0c;然后发送片选 共阴 共阳的图如下&#xff1a; 如何测量呢&#xff1f; 首先将数字万用表档位调节到蜂鸣器/二极管档&#xff0c;红表笔和黑表笔…

Vue生命周期详解

目录 1.beforeCreate2.created3.beforeMount4.mounted5.beforeUpdate6.updated7.beforeUnmount&#xff08;beforeDestroy&#xff09;8.unmounted&#xff08;destroyed&#xff09; 1.beforeCreate 分析 beforeCreate执行时Vue实例还没有被创建&#xff0c;data和methods也…

MySQL底层概述—1.InnoDB内存结构

大纲 1.InnoDB引擎架构 2.Buffer Pool 3.Page管理机制之Page页分类 4.Page管理机制之Page页管理 5.Change Buffer 6.Log Buffer 1.InnoDB引擎架构 (1)InnoDB引擎架构图 (2)InnoDB内存结构 (1)InnoDB引擎架构图 下面是InnoDB引擎架构图&#xff0c;主要分为内存结构和磁…

【力扣算法题】双指针-战场上的矛与盾的组合(移动零)(快乐数)

前言 &#x1f31f;&#x1f31f;本期讲解关于力扣算法两道双指针题目解析~~~ &#x1f308;感兴趣的小伙伴看一看小编主页&#xff1a;GGBondlctrl-CSDN博客 &#x1f525; 你的点赞就是小编不断更新的最大动力 &#x1f386;那么…

第三十九篇 ShuffleNet V1、V2模型解析

摘要 ShuffleNet V1 ShuffleNet V1是由旷视科技&#xff08;Megvii&#xff0c;又称Face&#xff09;在2017年底提出的一种轻量级卷积神经网络架构。该网络专为移动设备和边缘计算环境设计&#xff0c;旨在以较低的计算资源实现高效的图像分类和其他计算机视觉任务。 特点与…

Springboot系列之:创建Springboot项目,Springboot整合MyBatis-plus

Springboot系列之&#xff1a;创建Springboot项目&#xff0c;Springboot整合MyBatis-plus 一、快速创建Spring boot项目二、项目完整目录三、pom.xml四、application.yaml五、实体类六、mapper七、IService接口八、Service实现类九、配置类十、枚举十一、增删改查测试类十二、…

C++:用红黑树封装map与set-1

文章目录 前言一、STL源码分析二、红黑树的构建三、map与set整体框架的搭建与解析四、如何取出进行比较&#xff1f;1. met与set的数据是不同的2. 取出数据进行比较1&#xff09;问题发现2&#xff09;仿函数解决 五、封装插入六、迭代器的实现1. operator* 与operator->2. …

Perforce《2024游戏技术现状报告》Part3:生成式AI、版本控制、CI/CD等游戏技术的未来趋势与应用

游戏开发者一直处于创新前沿。他们的实践、工具和技术受到各行各业的广泛关注&#xff0c;正在改变着组织进行数字创作的方式。 近期&#xff0c;Perforce发布了《2024游戏技术现状报告》&#xff0c;通过收集来自游戏、媒体与娱乐、汽车和制造业等高增长行业的从业者、管理人…

4-SpringCloud整合服务间的调用即负载均衡

springcloud目录&#xff1a; 1.Spring Cloud简介 2.SpringCloud整合eureka注册中心 3.SpringCloud整合服务注册 4.SpringCloud整合服务间的调用即负载均衡 5.SpringCloud整合Feign调用 6.SpringCloud整合config配置中心 7.SpringCloud整合zuul路由网关 我们复制一个yqx-user服…

Elasticsearch客户端在和集群连接时,如何选择特定的节点执行请求的?

大家好&#xff0c;我是锋哥。今天分享关于【Elasticsearch客户端在和集群连接时&#xff0c;如何选择特定的节点执行请求的&#xff1f;】面试题。希望对大家有帮助&#xff1b; Elasticsearch客户端在和集群连接时&#xff0c;如何选择特定的节点执行请求的&#xff1f; 100…

深入浅出,快速安装并了解汇编语言

1.什么是汇编语言 了解汇编语言需要先从了解机器语言开始&#xff0c;在计算机发展的初期阶段&#xff0c;机器语言是计算机直接理解和执行的二进制代码语言&#xff0c;其核心特点包括直接执行性、资源高效性、学习难度大以及平台依赖性。它主要由指令码构成&#xff0c;这些…

2.2_3 纠错编码—海明码

目录 1、海明码的纠错过程 2、海明距离 3、确认检验码位数 4、确定校验码和数据的位置 5、求出校验码的值 6、检错并纠错 方法一 方法二 1、海明码的纠错过程 2、海明距离 两个合法编码(码字)的对应比特取值不同的比特数称为这两个码字的海明距离(码距)&#xff0c;一…

1992-2021年 各省市县经过矫正的夜间灯光数据(GNLD、VIIRS)区域汇总:省份、城市、区县面板数据

1992-2021年 各省市县经过矫正的夜间灯光数据&#xff08;GNLD、VIIRS&#xff09;区域汇总&#xff1a;省份、城市、区县面板数据 .r.rar https://download.csdn.net/download/2401_84585615/90001905 从1992年至2021年&#xff0c;中国各省份、城市及区县的夜间灯光数据经过…

微信小程序上传微信官方审核流程(1)

1&#xff0c;打开微信开发者工具 2&#xff0c;微信开发者工具右上角有一个上传按钮&#xff0c;点击上传按钮 3&#xff0c;点击完上传按钮会弹出一个上传成功的提示&#xff0c;点击提示框中的确定按钮 4&#xff0c;点击完确定按钮后会显示填写版本好和项目备注 5&#x…

快速获取镜像包的方法

1、当我们需要在无网络的环境中&#xff0c;在Docker环境中安装某个镜像时&#xff0c;需要先下载这个镜像包后&#xff0c;再上传 2、下面以在minio为例 在有网络的电脑中使用使用命令下载 docker pull minio/minio将下载好的tar包保存到指定的目录下 save -o /home/cl/app…