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.mzph.cn/diannao/61836.shtml

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

相关文章

241124_文本解码原理

241124_文本解码原理 一个文本序列的概率分布可以分解为每个词基于其上文的条件概率的乘积。 Greedy search 就是每步都选择概率最大的,不会去考虑全局 按照贪心搜索输出the nice woman 的概率就是0.5*0.40.2 这种方法简单,但也存在问题,比…

介绍一下strlwr(arr);(c基础)

hi , I am 36 适合对象c语言初学者 strlwr(arr)&#xff1b;函数是把arr数组变为小写字母 格式 #include<string.h> strlwr(arr); 返回值为arr 链接分享一下arr的意义(c基础)(必看)(牢记)-CSDN博客 #define _CRT_SECURE_NO_WARNINGS #include<stdio.h> #incl…

16:(标准库)ADC三:使用外部触发启动ADC/模拟看门狗

使用外部触发启动ADC 1、外部中断线EXTI11触发ADC2、外部定时器TIM2_CH2触发ADC3、ADC中模拟看门狗的使用 1、外部中断线EXTI11触发ADC ADC的触发方式有很多&#xff0c;一般情况都是使用软件触发反式启动ADC转换。除了软件触发方式还能使用外部事件触发启动ADC转换。如下图所…

Linux之管道,system V的共享内存,消息队列和信号量

Linux之管道&#xff0c;systemV共享内存和信号量 一.进程间通信1.1进程间通信的目的1.2进程间通信的方式 二.管道2.1管道的概念2.2匿名管道2.3命名管道 三.system V3.1共享内存3.2消息队列3.3信号量 一.进程间通信 在我们之前有关Linux指令的学习时我们使用过“|”这个命令&a…

使用ChatGPT生成和优化电子商务用户需求规格说明书

在电子商务项目开发中&#xff0c;用户需求规格说明书&#xff08;User Requirement Specification, URS&#xff09;是团队沟通与项目成功的基石。然而&#xff0c;面对复杂多变的需求&#xff0c;如何快速生成清晰、完整且具备说服力的文档&#xff1f;这正是AI工具的用武之地…

1+X应急响应(网络)常见网络攻击-SQL注入:

常见网络攻击-SQL注入&#xff1a; SQL注入概述&#xff1a; 动态网站的工作流程&#xff1a; SQL注入的起源&#xff1a; SQL典型的攻击手段&#xff1a; SQL注入的危害&#xff1a; SQL注入的函数&#xff1a; SQL注入类型&#xff1a; 提交方式分类&#xff1a; Get注入&am…

Spire.PDF for .NET【页面设置】演示:打开 PDF 时自动显示书签或缩略图

用户打开 PDF 文档时&#xff0c;他们会看到 PDF 的初始视图。默认情况下&#xff0c;打开 PDF 时不会显示书签面板或缩略图面板。在本文中&#xff0c;我们将演示如何设置文档属性&#xff0c;以便每次启动文件时都会打开书签面板或缩略图面板。 Spire.PDF for .NET 是一款独…

[Docker-显示所有容器IP] 显示docker-compose.yml中所有容器IP的方法

本文由Markdown语法编辑器编辑完成。 1. 需求背景: 最近在启动一个服务时&#xff0c;突然发现它的一个接口&#xff0c;被另一个服务ip频繁的请求。 按理说&#xff0c;之前设置的是&#xff0c;每隔1分钟请求一次接口。但从日志来看&#xff0c;则是1秒钟请求一次&#xff…

单片机GPIO的8种工作模式

1、输入 GPIO_MODE_AIN:模拟输入 GPIO_MODE_IN_FLOATING:浮空输入 GPIO_MODE_IPD:下拉输入 GPIO_MODE_IPU:上拉输入 2、输出 GPIO_MODE_OUT_OD:开漏输出&#xff08;特殊情况使用&#xff09; GPIO_MODE_OUT_PP&#xff1a;推挽输出-----点灯&#xff08;通用&#…

Azkaban部署

首先我们需要现在相关的组件&#xff0c;在这里已经给大家准备好了相关的安装包&#xff0c;有需要的可以自行下载。 只需要启动hadoop集群就可以&#xff0c;如果现在你的hive是打开的&#xff0c;那么请你关闭&#xff01;&#xff01;&#xff01; 如果不关会造成证书冲突…

时钟使能、

时钟使能 如果正确使用&#xff0c;时钟使能能够显著地降低系统功耗&#xff0c;同时对面积或性能的影响极小。但是如果不正确地使用时钟使能&#xff0c; 可能会造成下列后果&#xff1a; • 面积增大 • 密度减小 • 功耗上升 • 性能下降 在许多使用大量控制集的…

视觉经典神经网络与复现:深入解析与实践指南

目录 引言 经典视觉神经网络模型详解 1. LeNet-5&#xff1a;卷积神经网络的先驱 LeNet-5的关键特点&#xff1a; 2. AlexNet&#xff1a;深度学习的突破 AlexNet的关键特点&#xff1a; 3. VGGNet&#xff1a;深度与简洁的平衡 VGGNet的关键特点&#xff1a; 4. ResNe…

【CSS in Depth 2 精译_060】9.3 详解 CSS 作用域的相关概念、最新 @scope 规则的应用及注意事项

当前内容所在位置&#xff08;可进入专栏查看其他译好的章节内容&#xff09; 【第九章 CSS 的模块化与作用域】 ✔️ 9.1 模块的定义 9.1.1 模块和全局样式9.1.2 一个简单的 CSS 模块9.1.3 模块的变体9.1.4 多元素模块 9.2 将模块组合为更大的结构 9.2.1 模块中多个职责的拆分…

uniapp实现开发遇到过的问题(持续更新中....)

1. 在ios模拟器上会出现底部留白的情况 解决方案&#xff1a; 在manifest.json文件&#xff0c;找到开源码视图配置&#xff0c;添加如下&#xff1a; "app-plus" : {"safearea":{"bottom":{"offset" : "none" // 底部安…

React(六)——Redux

文章目录 项目地址基本理解一、配置Redux store二、创建slice配置到store里并使用三、给Slice配置reducers&#xff0c;用来修改初始值 项目地址 教程作者&#xff1a;教程地址&#xff1a; 代码仓库地址&#xff1a; 所用到的框架和插件&#xff1a; dbt airflow基本理解 s…

国家级资质!同驭汽车获得CNAS实验室认证

近日&#xff0c;同驭汽车科技顺利通过中国合格评定国家认可委员会&#xff08;简称CNAS&#xff09;评审&#xff0c;获得《中国合格评定国家认可委员会实验室认可证书》。这标志着同驭已建立国际标准的实验室管理体系&#xff0c;产品的试验与检测技术能力达到了国际认可的准…

HTML5好看的音乐播放器多种风格(附源码)

文章目录 1.设计来源1.1 音乐播放器风格1效果1.2 音乐播放器风格2效果1.3 音乐播放器风格3效果1.4 音乐播放器风格4效果1.5 音乐播放器风格5效果 2.效果和源码2.1 动态效果2.2 源代码 源码下载万套模板&#xff0c;程序开发&#xff0c;在线开发&#xff0c;在线沟通 作者&…

快速简单的视频下载器——lux

文章目录 前言1.环境检查1.1 检查 lux 安装1.2 检查FFmpeg安装1.3 备注 2. lux指令2.1 无OPTIONS2.2 -i 指令2.3 - f 指令2.4 -c 指令2.5 -o 指令2.6 备注 3.结语 前言 在学习之余&#xff0c;发现了一个简单并且高效的视频下载器lux,能够帮你快速且高效的下载文件&#xff08…

linux ubuntu的脚本知

目录 一、变量的引用 二、判断指定的文件是否存在 三、判断目录是否存在 四、判断最近一次命令执行是否成功 五、一些比较符号 六、"文件"的读取和写入 七、echo打印输出 八、ubuntu切换到root用户 N、其它可以参考的网址 脚本功能强大&#xff0c;用起来也…

Python爬虫进阶实战项目:使用青果网代理高效爬取某手办网详情数据

1 引言 计算机&#xff0c;获取数据&#xff0c;还在慢慢复制粘贴&#xff1f;聪明的朋友都已经用爬虫高效获取数据&#xff0c;但是经常搞爬虫遇见ip管控防爬&#xff0c;咱们怎么处理&#xff1f;在我看来随着数据需求增加&#xff0c;爬虫成为高效获取数据的工具。然而&…