首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

mysql 行格式选择

MySQL行格式选择

基础概念

MySQL中的行格式决定了数据在磁盘上的存储方式。主要有两种行格式:CompactRedundant(在MySQL 5.0及之前版本中)以及DynamicCompressed(在MySQL 5.6及之后版本中)。行格式的选择会影响存储空间、性能以及一些特定功能的使用。

相关优势

  • Compact:存储空间相对较少,支持变长字段(如VARCHAR),但不支持BLOB字段的部分存储。
  • Redundant:与Compact类似,但包含额外的元数据信息,用于兼容旧版本。
  • Dynamic:支持BLOB字段的部分存储,可以节省大量空间,但可能会增加I/O操作。
  • Compressed:在Dynamic的基础上进一步压缩数据,减少磁盘占用,但会增加CPU负载。

类型

  • Compact:适用于大多数场景,特别是当表中没有大字段(如BLOB)时。
  • Dynamic:适用于包含大字段的表,可以显著减少存储空间。
  • Compressed:适用于对存储空间有极高要求的场景,但可能会牺牲一些性能。

应用场景

  • Compact:适用于大多数通用数据库场景。
  • Dynamic:适用于数据仓库、日志系统等包含大量文本或二进制数据的场景。
  • Compressed:适用于存储空间有限的环境,如嵌入式系统或云环境。

遇到的问题及解决方法

问题1:为什么选择Dynamic行格式后,某些查询变慢了?

原因:Dynamic行格式支持BLOB字段的部分存储,这意味着MySQL需要额外的I/O操作来读取完整的数据。

解决方法

  1. 优化查询:尽量减少对大字段的查询,或者使用索引来加速查询。
  2. 调整缓冲区大小:增加innodb_buffer_pool_sizeinnodb_log_buffer_size,以减少磁盘I/O操作。

问题2:为什么选择Compressed行格式后,CPU使用率增加了?

原因:Compressed行格式需要对数据进行压缩和解压缩,这会增加CPU的负载。

解决方法

  1. 评估CPU资源:确保服务器有足够的CPU资源来处理压缩和解压缩操作。
  2. 调整压缩级别:在创建表时,可以通过ROW_FORMAT=COMPRESSED KEY_BLOCK_SIZE来调整压缩级别,以平衡存储空间和CPU负载。

示例代码

代码语言:txt
复制
-- 创建一个使用Dynamic行格式的表
CREATE TABLE example_dynamic (
    id INT PRIMARY KEY,
    name VARCHAR(255),
    content TEXT
) ROW_FORMAT=DYNAMIC;

-- 创建一个使用Compressed行格式的表
CREATE TABLE example_compressed (
    id INT PRIMARY KEY,
    name VARCHAR(255),
    content TEXT
) ROW_FORMAT=COMPRESSED KEY_BLOCK_SIZE=8;

参考链接

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

【MySQL】InnoDB行格式

1)数据存储形式 首先明确在 innodb 引擎中数据是以页为基本单位读取的,而一个页中又包含多个行数据,那么对应地就会有不同的行格式来存储数据,innodb 中的行格式有四种:compact、redundant...redundant 是 5.0 之前用的行格式,这里就不记录了。 2)compact 行格式 可以看到 compact 行格式中将一行分成了两个部分,一个是真实数据的存储,一个是一些记录的信息。...① 变长字段长度列表在 MySQL 中有 char 和 varchar 两种字符串类型,他们的区别是 varchar 是变长的类型,对于一列二进制流,我们通过变长字段长度列表就可以得到真实长度。...3)dynamic 与 compressed 行格式 dynamic 与 compact 基本相同,只不过对于大长度字符串的处理略有不同。...4)对于大字符串溢出的处理 MySQL 限制一个行中除了 text、blob 之外的其他所有列合起来最大只能存储 65535 个字节,如果超过该值会报错,只能使用 blob 或者 text 类型来存储。

1.6K10

MySQL行格式原理深度解析

二、MySQL中常见的几种行格式的详细介绍 MySQL 的行格式是指表中每一行的存储格式,包括数据、元数据、版本信息、行头等。...另一些行格式采用压缩技术以减少磁盘空间占用,虽然提高了磁盘IO效率,但增加了CPU的解压负担。因此,在选择行格式时,必须权衡存储效率与计算资源消耗,根据实际应用场景做出合理决策。...行格式的选择 在选择行格式时,需要根据具体的存储需求、硬件资源和性能要求来进行权衡。...通常,Compact和Dynamic格式是较为常用的选择,而Redundant格式主要用于与旧版本的MySQL保持兼容,Compressed格式则适用于特定的存储和性能要求。...MySQL版本5.7默认使用DYNAMIC行格式。 三、指定和查看行格式 指定行格式 你可以在创建或修改表的时候指定行格式。

70610
  • MySQL原理 - InnoDB引擎 - 行记录存储 - Redundant行格式

    本文基于 MySQL 8 在上一篇:MySQL原理 - InnoDB引擎 - 行记录存储 - Compact格式 中,我们介绍了什么是 InnoDB 行记录存储以及 Compact 行格式,在这一篇中...,我们继续介绍其他三种行格式。...Redundant 行格式 这个是最古老的,最简单粗暴的行格式了,现在基本上已经不用了,因为占用空间最多,从而导致内存碎片化最严重,是最低效的行格式了(针对现在varchar字段使用的更多,而对于 varchar...MySQL官网的 Internal Mannual 给出的行格式示例,其实就是 Redundant 格式的: InnoDB Record High-Altitude Picture 创建一个和上一篇中的示例一样的表...Compact 行格式的记录头的区别就是少了record_type位,多了n_field和1byte_offs_flag这两个。

    65430

    MySQL原理 - InnoDB引擎 - 行记录存储 - Compact 行格式

    MySQL 一般都会使用 InnoDB 引擎,这也是默认的表引擎。...至于怎么存储,这个还和 InnoDB **行格式(InnoDB Row Format)**有关。行格式一共有四种:Compact、Redundant、Dynamic和Compressed。...我们可以在创建或修改表的语句中指定行格式: CREATE TABLE 表 ( )ROW_FORMAT=行格式; ALTER TABLE 表 ROW_FORMAT=行格式; Compact 行格式存储...Compact 行格式存储 - NULL 值列表 某些字段可能可以为 NULL,如果对于 NULL 还单独存储,是一种浪费空间的行为,和 Compact 行格式存储的理念相悖。...Compact 行格式存储 - 记录头信息 对于Compact 行格式存储,记录头固定为5字节大小: 名称 大小(bits) 描述 无用位 2 目前没用到 deleted_flag 1 记录是否被删除

    1.3K20

    InnoDB行格式

    我们平时是以记录为单位来向表中插入数据的,这些记录在磁盘上的存放方式也被称为行格式或者记录格式。...设计InnoDB存储引擎的大叔们到现在为止设计了4种不同类型的行格式,分别是Compact、Redundant、Dynamic和Compressed行格式,随着时间的推移,他们可能会设计出更多的行格式,...我们可以看整个表的大小,和行格式,默认行格式就是Dynamic。网上好多文章说,对于InnoDB表,默认的行格式为:COMPACT。是错的。 ?...Dynamic和Compact行格式挺像,只不过在处理行溢出数据时有点儿分歧,它们不会在记录的真实数据处存储字段真实数据的前768个字节,而是把所有的字节都存储到其他页面中,只在记录的真实数据处存储其他页面的地址...MySQL对于我们来说还是一个黑盒,我们只负责使用客户端发送请求并等待服务器返回结果,表中的数据到底存到了哪里?以什么格式存放的?MySQL是以什么方式来访问的这些数据?

    58010

    MySQL的InnoDB存储引擎支持哪几种行格式?

    在InnoDB存储引擎中,常见的行格式主要包括以下四种: COMPACT:在MySQL 5.0之前是默认的格式,除了存储字段值外,还会利用空值列表来保存null值,同时记录变长字段长度列表和记录头信息。...REDUNDANT:在MySQL 5.0版本之前,InnoDB使用的行记录存储方式,较少使用。Redundant 行格式会将该记录中所有列(包括隐藏列)的长度信息存储在“字段长度偏移列表”中。...它延续了COMPACT格式的优势,在处理大型可变长度列时更具灵活性,能够灵活选择将数据存储在页内还是页外。DYNAMIC格式适用于多数应用场景,在存储空间和性能之间取得了一定的平衡。...COMPRESSED行格式在DYNAMIC行格式的基础上引入了页外压缩功能。在存储数据时,如果发现可以通过压缩来减小存储空间,系统将选择压缩方式来存储数据。在查询时,数据将会被自动解压并返回结果。...BARRACUDA:作为MySQL 5.7引进的一种新格式,相较于前述格式,支持更多高级特性,包括动态行格式、逐行压缩以及空间管理等功能。

    24910

    REDUNDANT行格式的数据解析

    导读mysql的行格式有4种,REDUNDANT,COMPACT,DYNAMIC和COMPRESSED. 最常用的就是DYNAMIC, 也是mysql默认的行格式(很早只有REDUNDANT)....而且和DYNAMIC之类的差别不大, 甚至还简单很多, 所以我们简单介绍下即可.innodb的行格式都如下结构, 标红的地方就是和DYNAMIC格式的一丢丢区别.RECORD HEADER先来看看record...结构如下:总结一个字就是:花里胡哨解析REDUNDANT行格式的脚本说了这么多, 那我们就来解析解析REDUNDANT格式吧. 为了方便使用, 我们就单独写个脚本来解析....我们这里选择了后者, 所以埋下了一个坑(5.7场景的sdi是来自8.0的, 所以就对不上咯.)....的ibd文件第二个参数是: 对应的8.0里面的ibd文件(在8.0里面建个一样的空表即可)注: 这个版本的时候, 我把结尾的空格也保留了.对于char来说就会很丑, 不过无所谓了拉.总结innodb的行格式总体长得差不多

    19630

    MySQL-InnoDb行格式与数据页结构 Krains 2020-08-08

    File Trailer(文件尾部) 8字节 校验页是否完整 # InnoDB行格式 一行记录可以以不同的格式存在InnoDB中,行格式分别是Compact、Redundant、Dynamic和Compressed...我们可以在创建或修改表的语句中指定行格式: create table 表名(列的信息) row_format=行格式名称 alter table 表名 row_format=行格式名称 1 2 Compact...行格式 ?...( MySQL5.0.3以前是字节,以后就是字符) NULL值列表 Compact行格式会把可以为NULL的列统一管理起来,存一个标记为在NULL值列表中,如果表中没有允许存储 NULL 的列,则 NULL...Dynamic(默认使用的行格式)和Compressed行格式 这两种行格式类似于COMPACT行格式,只不过在处理行溢出数据时有点儿分歧,它们不会在记录的真实数据处 存储一部分数据,而是把所有的数据都存储到其他页面中

    64110

    MySQL的行转列

    MySQL的行转列操作 在MySQL中,经常会遇到行转列和列转行的操作,今天来看看这种问题的解决办法,先来说说行转列。...MySQL行转列操作 所谓的行转列操作,就是将一个表的行信息转化为列信息,说着可能比较笼统,这里先举个例子,如下: +----+-----------+--------+-------+ | ID...+-----------+--------+--------+--------+ rows in set (0.00 sec) 上面的例子中,表1给出了三个学生的三门成绩,而表2是将表1的行记录信息...| 89 | +-----------+--------+--------+--------+ 3 rows in set (0.00 sec) 3 添加total列 当我们把基本的行转列实现之后...-+--------+--------+--------+-------+ 3 rows in set (0.00 sec) 4 简单方法 group_concat 如果我们对于结果的显示格式要求不是那么细致的话

    13.2K10

    iOS Android音频格式的选择

    可选格式 ios android做音频相关的开发时可选用的格式有 mp3,speex,aac,amr,ilbc 已知应用 amr:微信 evemote speex:米聊 文件格式大小 mp3>aac>...amr/ilbc>speex 各个格式简介 amr:生成格式相对较小,Android原生支持,ios可用第三方库进行编码解码 speex:生成文件最小,Android、ios均需要用第三方库进行编码解码...aac:生成文件相对较大,Android,ios均支持,声音质量较好,比mp3文件小 ilbc:生成文件较小,ios 4.3以上支持,Android早期不支持可用第三方库 mp3:相比文件最大,比较流行的格式...个人推荐 相比下来,我还是比较推荐用amr格式,网上的教程多,又不像speex一样需要双方都编码解码,生成的文件也较小,比较适合做语音通话

    1.7K20

    扫码

    添加站长 进交流群

    领取专属 10元无门槛券

    手把手带您无忧上云

    扫码加入开发者社群

    相关资讯

    热门标签

    活动推荐

      运营活动

      活动名称
      广告关闭
      领券