文章中看到这样一句话,引起了我的深思,然后去研究了一下 ROW_FORMAT

CHAR 与VARCHAR 之间的特点与选择
CHAR和VARCHAR的区别如下:
1)、CHAR是固定长度字符, VARCHAR是可变长度字符;
2)、CHAR会自动删除插入数据的尾部空格, VARCHAR不会删除尾部空格。

CHAR是固定长度,所以它的处理速度比VARCHAR的速度要快,但是它的缺点就是浪费存储空间。所以对存储不大,但在速度上有要求的可以使用CHAR类型,反之可以使用VARCHAR类型来实现。

存储引擎对于选择CHAR和VARCHAR的影响:
对于MyISAM存储引擎:最好使用固定长度的数据列代替可变长度的数据列。这样可以使整个表静态化,从而使数据检索更快,用空间换时间。
对于InnoDB存储引擎:使用可变长度的数据列,因为InnoDB数据表的存储格式不分固定长度和可变长度,因此使用CHAR不一定比使用VARCHAR更好,但由于VARCHAR是按照实际的长度存储,比较节省空间,所以对磁盘I/O和数据存储总量比较好。

在MySQL中,所谓Row_Format行格式是指数据记录(或者称之为行)在磁盘中的物理存储方式。

MyISAM行存储
  MyISAM有3种行存储格式:fixed/dynamic/compressed
  1、fixed:为默认格式,只有当表不包含变长字段(varchar/varbinary/blob/text)时使用,该每行都是固定的,所以很容易获取行在页上的具体位置,存取效率比较高,但是占用磁盘空间较多

InnoDB行存储
  Innodb plugin新引入Barracuda,其包含compressed/dynamic两种行格式,而之前的compact/redundant统属于antelope;目前可选值为Antelope和Barracuda,低版本默认为Antelope,高版本默认为Barracuda。

1. Antelope: 它支持两种行格式:COMPACT 和 REDUNDANT。MySQL5.6的默认文件格式。可以与早期的版本保持最大的兼容性。不支持 Barracuda 文件格式。

2. Barracuda: 新的文件格式。它支持InnoDB的所有行格式,包括新的行格式:COMPRESSED 和 DYNAMIC。

在 msyql 5.7.9 及以后版本,默认行格式由innodb_default_row_format变量决定,它的默认值是DYNAMIC,也可以在 create table 的时候指定ROW_FORMAT=DYNAMIC。用户可以通过命令 SHOW TABLE STATUS LIKE'table_name' 来查看当前表使用的行格式,其中 row_format 列表示当前所使用的行记录结构类型。

如果要修改现有表的行模式为compressed或dynamic,必须先将文件格式设置成Barracuda:set global innodb_file_format=Barracuda;,再用ALTER TABLE tablename ROW_FORMAT=COMPRESSED;去修改才能生效。

InnoDB存储引擎Compact、Redundant、Dynamic、Compressed主要区别:

1)、compact、Dynamic、Compressed 行格式下,字段为NULL值是不会在记录的数据内容中占用存储空间,冗余存储的;
2)、redundant行格式下,如果值为NULL的字段类型为变长数据类型,不会在记录的数据内容中占用任何空间来进行存储的,
如果值为NULL的字段类型为定长数据类型,其使用0x00来填充该字段所需占用的空间。例如char(10)类型的字段,在ascii、utf8字符集中其Maxlen值分别为1、3。即该字段在数据内容部分会分别占用的10、30个字节。故当该字段为NULL值时,会使用0x00来填充这10、30个字节的位置。

行溢出
compact、redundant行格式中,如果该记录某字段中数据量过多时,则在该记录的数据内容的相应字段处只存储该字段值前768个字节的数据和一个指向存储剩余数据的其他页(即所谓的溢出页)的地址,该地址通常占用20个字节。
Dynamic、Compressed行格式中,会把记录中数据量过大的字段值全部存储到溢出页中,而不会在该记录的数据内容的相应字段处存储该字段值前768个字节的数据了。
而compressed相比较dynamic行格式来说,前者会使用压缩算法对所有页面(自然也包括溢出页)进行压缩以减少存储占用。

遇到过这样一个问题,原因是InnoDB不支持ROW_FORMAT为FIXED。

mysql>  create table tmp11(id varchar(10)) ROW_FORMAT=FIXED;
ERROR 1031 (HY000): Table storage engine for 'tmp11' doesn't have this option
mysql> show variables like 'default_storage_engine';
+------------------------+--------+
| Variable_name          | Value  |
+------------------------+--------+
| default_storage_engine | InnoDB |
+------------------------+--------+
1 row in set (0.00 sec)

mysql 中 ROW_FORMAT的选择相关推荐

  1. mysql中3个月之前日期_在MySQL中从当前日期选择当前日期到3个月之间的日期?

    使用BETWEEN和INTERVAL实现此目的.让我们首先创建一个表-mysql> create table DemoTable -> ( -> AdmissionDate date ...

  2. mysql中什么是选择引擎_Mysql 应该选择什么引擎

    对于如何选择存储引擎,可以简答的归纳为一句话:"除非需要用到某些INNODB 不具备的特性,并且没有其他办法可以替代,否则都应该选择INNODB 引擎".例如:如果要用到全文索引, ...

  3. mysql中辅导方式选择_MYSQL中如何选择合适的数据类型

    数值,典型代表为 tinyint,int,bigint 浮点/定点,典型代表为 float,double,decimal 以及相关的同义词 字符串,典型代表为 char,varchar 时间日期,典型 ...

  4. mysql中gender要用什么类型,如何选择合适的MySQL数据类型

    一.MySQL数据类型选择原则 更小的通常更好:一般情况下选择可以正确存储数据的最小数据类型.越小的数据类型通常更快,占用磁盘,内存和CPU缓存更小. 简单就好:简单的数据类型的操作通常需要更少的CP ...

  5. 在mysql中什么情况下不能指定字符集_如何为Mysql选择合适的字符集?

    MySQL服务器可以支持多种字符集,在同一台服务器,同一个数据库,甚至同一个表的不同字段都可以指定使用不同的字符集,相比Oracle等其他数据库管理系统,在同一个数据库只能使用相同的字符集,MySQL ...

  6. 在MySQL中当有多个索引时 你知道MySQL是如何选择索引的吗 ???

    在码农的世界里,优美的应用体验,来源于程序员对细节的处理以及自我要求的境界,年轻人也是忙忙碌碌的码农中一员,每天.每周,都会留下一些脚印,就是这些创作的内容,有一种执着,就是不知为什么,如果你迷茫,不 ...

  7. 面试官问:mysql中时间日期类型和字符串类型的选择

    摘要:MySQL中有多种表示时间日期的数据类型,主要有YEAR.TIME.DATE.DATETIME.TIMESTAMP等 本文分享自华为云社区<一针见血,mysql中时间日期类型和字符串类型的 ...

  8. mysql 前n个最大值_选择MySQL中的第n个最大值

    要选择MySQL中的第n个最大值,请使用以下语法-select distinct(yourColumnName) from yourTableName order by yourColumnName  ...

  9. mysql最长字段_在mysql中使用GROUP BY时,如何选择最长的文本字段?

    在 MySql中,您可以使用MAX()函数来获取最高的值,当使用GROUP BY时,我该怎么做同样的事情来获得最长的文本字符串? 样品表: id_|_post_id|_title__________| ...

最新文章

  1. 福布斯:2022年计算机视觉领域五大发展趋势
  2. UA SIE545 优化理论基础5 搜索与整数规划1 DFS算法
  3. Asp.Net在导入外部脚本
  4. 485串口光纤转换器产品介绍
  5. Android官方开发文档Training系列课程中文版:管理Activity的生命周期之Activity的重建
  6. Python批量导入图片生成PowerPoint 2007+文件
  7. 开源监控解决方案Nagios+Cacti+PNP4Nagios+NConf+NDOUtils+Nagvis(九)NagVis安装
  8. FFmpeg之mp4提取/h265(二十五)
  9. 【Code Review】赛后专访
  10. Mysql ODBC 数据源配置
  11. 月薪3万Java优秀简历模板
  12. kafka中的消息(topic)和日志(log)
  13. eNews 第二十三期/2007.04
  14. oracle之归档日志空间管理
  15. 访客模式 无痕模式 区别_旧访客设计模式的新生活
  16. Python零基础之自动登录12306
  17. OC 基础 UIButton
  18. 增广拉格朗日乘子法(Augmented Lagrange Method)
  19. echarts 3D折线图应用
  20. 解决java的非法字符: ‘\u200b‘的问题

热门文章

  1. TCP/IP 协议体系结构模型
  2. 不良资产收购中房地产评估的工作要点
  3. 模板匹配 -提高计算速度
  4. Linux命令学习之cp和mv
  5. mongodb备份oplog_MongoDB备份方式详细介绍
  6. 如何使一整张背景图片自适应div的大小
  7. Spring框架——Bean的Scope(作用域)易错陷阱解析
  8. 芒果TV开启付费模式:看《我是歌手3》得掏钱
  9. vue2进阶篇:vue-router之路由的params参数
  10. 华为 USG6625E 防火墙