将MySQL中的row_format修改为dynamic?

将MySQL中的row_format修改为dynamic?

MySQL是一款多功能的关系型数据库管理系统,其表的存储格式在创建表时也需要指定,其中一个重要的属性是row_format,这个属性决定了表的行存储格式。MySQL支持4种行存储格式:COMPACTREDUNDANTDYNAMICCOMPRESSED。本文将重点介绍如何将MySQL中的row_format属性修改为dynamic。

阅读更多:MySQL 教程

row_format属性

在MySQL表的创建或更改时,可以通过指定ROW_FORMAT属性来设置该表的行存储格式。ROW_FORMAT属性决定了建立在该表上的索引所采用的方法和数据的存储方式。具体使用方法如下:

CREATE TABLE tablename (
    id INT UNSIGNED NOT NULL AUTO_INCREMENT,
    first_name VARCHAR(50) NOT NULL,
    last_name VARCHAR(50) NOT NULL,
    email VARCHAR(100) NOT NULL,
    PRIMARY KEY (id)
) ENGINE=InnoDB ROW_FORMAT=DYNAMIC;

其中,ROW_FORMAT=DYNAMIC表示此表使用DYNAMIC行存储格式。其他3种行存储格式分别为:COMPACT、COMPRESSED、REDUNDANT。默认的行存储格式为COMPACT。

DYNAMIC行存储格式

DYNAMIC格式存储行被设计用于减少空间占用,它仅存储行中非空列的数据。如果行的某个列是NULL,那么该列将不会占用任何空间。此外,DYNAMIC行存储格式允许使用可变长度的数据类型,如VARCHAR、TEXT等。DYNAMIC格式还支持使用专用压缩算法来压缩行数据。

下面我们通过实例来演示如何将MySQL表的行存储格式修改为DYNAMIC。

实例

以一个学生表为例,说明如何将表的行存储格式修改为DYNAMIC。

首先,我们先创建一个名为students的表,并在其中添加一些数据:

CREATE TABLE students (
  id INT NOT NULL AUTO_INCREMENT,
  name VARCHAR(50) NOT NULL,
  age INT NOT NULL,
  gender VARCHAR(10) NOT NULL,
  address VARCHAR(200) NOT NULL,
  PRIMARY KEY (id)
) ENGINE=InnoDB CHARSET=utf8mb4 ROW_FORMAT=COMPACT;

INSERT INTO students(name, age, gender, address)
VALUES("张三", 20, "男", "北京市海淀区"),
      ("李四", 22, "女", "上海市浦东区"),
      ("王五", 21, "男", "广东省深圳市福田区"),
      ("赵六", 23, "女", "浙江省杭州市拱墅区");

其次,我们使用ALTER TABLE语句将students表的行存储格式修改为DYNAMIC:

ALTER TABLE students ROW_FORMAT=DYNAMIC;

最后,我们可以使用以下语句查看修改后的表结构。

SHOW CREATE TABLE students;

输出结果如下所示:

CREATE TABLE `students` (
  `id` int NOT NULL AUTO_INCREMENT,
  `name` varchar(50) NOT NULL,
  `age` int NOT NULL,
  `gender` varchar(10) NOT NULL,
  `address` varchar(200) NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 ROW_FORMAT=DYNAMIC

我们可以看到,students表的行存储格式已经被修改为DYNAMIC。此时,如果我们插入一条只有前三列数据的记录,那么最后一列地址信息将不会被存储,从而减少了存储空间。

INSERT INTO students(name,age,gender) VALUES("孙七",24,"女");

注意事项

在修改表的行存储格式之前,需要注意以下几点:

  1. 表修改后数据可能会失真,建议在应用低峰期进行修改;
  2. 修改表行格式会导致表锁住,可能会影响线上业务,请谨慎操作;
  3. 如果表的数据量很大,修改行存储格式可能需要一段时间,需要耐心等待。
  4. 不同的行格式可能会影响到表的效率和性能,请根据实际需要选择合适的行格式。

结论

DYNAMIC行存储格式是MySQL中用于减少空间占用的存储方式之一。通过该格式可以减少存储无用的NULL值的空间,提升数据库的存储性能。在实际业务中,如果表的数据量较大,可以考虑将表的行存储格式修改为DYNAMIC。通过本文的介绍,您已经了解到了如何操作,希望对您有所帮助。

Camera课程

Python教程

Java教程

Web教程

数据库教程

图形图像教程

办公软件教程

Linux教程

计算机教程

大数据教程

开发工具教程

MySQL 教程