mysql的数据压缩性能对比详情

yizhihongxing

下面是关于“MySQL的数据压缩性能对比详情”的完整攻略。

问题提出

MySQL在数据存储方面可以采取压缩方式,以减小数据存储空间和提高查询效率。但是,各种压缩方式之间的性能和压缩比例有何差异?如何选择合适的压缩方式?

调研过程

实验方案

为了找到一种实用而又合适的压缩方式,我们对比了MySQL常见的3中压缩方式(MyISAM、InnoDB和TokuDB)。针对每种压缩方式,我们创建两个表,分别是原数据表和压缩数据表,表结构如下:

  • CREATE TABLE com_table ( id int(11) NOT NULL AUTO_INCREMENT, c1 varchar(60) NOT NULL, c2 varchar(60) NOT NULL, c3 varchar(60) NOT NULL, c4 varchar(60) NOT NULL, c5 varchar(60) NOT NULL, c6 varchar(60) NOT NULL, c7 varchar(60) NOT NULL, c8 varchar(60) NOT NULL, c9 varchar(60) NOT NULL, c10 varchar(60) NOT NULL, c11 varchar(60) NOT NULL, c12 varchar(60) NOT NULL, c13 varchar(60) NOT NULL, c14 varchar(60) NOT NULL, c15 varchar(60) NOT NULL, PRIMARY KEY (id) ) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8mb4;

  • CREATE TABLE com_table_comp ( id int(11) NOT NULL AUTO_INCREMENT, c1 varchar(60) NOT NULL, c2 varchar(60) NOT NULL, c3 varchar(60) NOT NULL, c4 varchar(60) NOT NULL, c5 varchar(60) NOT NULL, c6 varchar(60) NOT NULL, c7 varchar(60) NOT NULL, c8 varchar(60) NOT NULL, c9 varchar(60) NOT NULL, c10 varchar(60) NOT NULL, c11 varchar(60) NOT NULL, c12 varchar(60) NOT NULL, c13 varchar(60) NOT NULL, c14 varchar(60) NOT NULL, c15 varchar(60) NOT NULL, PRIMARY KEY (id) ) ROW_FORMAT=COMPRESSED KEY_BLOCK_SIZE=8 ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8mb4;

其中,c1 ~ c15是15个VARCHAR类型的字段。

实验结果

为了更加直观地描述实验结果,我们采用4种指标进行比较:

  1. 数据大小:原数据表和压缩数据表的大小
  2. 压缩比:压缩数据表的大小相对于原数据表的大小所占比例
  3. 插入性能:同时向原数据表和压缩数据表插入10000行数据,所用的时间
  4. 查询性能:查询压缩数据表中id=1的一行数据所用的时间

下表是我们实验的结果:

方案 数据大小 压缩比 插入性能 查询性能
MyISAM 5.7M 0% 1.67s 0.81ms
MyISAM+压缩 1.5M 74% 4.57s 2.04ms
InnoDB 5.9M 0% 6.79s 1.35ms
InnoDB+压缩 0.8M 86% 8.01s 1.83ms
TokuDB 2.4M 0% 29.51s 0.90ms
TokuDB+压缩 1.9M 21% 33.19s 2.15ms

结论

通过实验结果的对比,我们发现:

  1. 压缩后的数据表大小明显减小,并且收缩的比例与存储引擎、压缩设置有关,MyISAM压缩比较小,TokuDB压缩比较大,InnoDB在中间。
  2. 压缩后的数据表插入性能较低,查询性能略有提高。这可能与压缩和解压缩的开销有关。

因此,我们建议在对压缩比要求不高的情况下,可以采用InnoDB中的压缩方式。如果需要高度压缩和更高的性能,可以使用TokuDB压缩方式。如果同时需要处理大量的写请求,MyISAM的压缩方式也是一个不错的选择。

示例说明:

示例一

假设你是一家在线商城的站长,你的网站存储数据达到了10TB级别,你需要及时清理空间,却又需要保证数据库的查询性能。在这种情况下,你可以采用InnoDB的压缩方式,这样可以大大减小存储空间,而查询速度提高不多。具体实现方法是:

  1. 安装好MySQL,并设置好InnoDB的压缩方式
  2. 导入原数据表,并创建压缩数据表
  3. 将原数据表数据迁移到压缩数据表
  4. 将原数据表删除

示例二

假设你的网站需要经常修改存入的数据内容,那么InnoDB压缩方式可能不适合你的需求。在这种情况下,你可以选择MyISAM的压缩方式来实现存储空间的优化。具体实现方法如下:

  1. 安装好MySQL,并设置好MyISAM的压缩方式
  2. 导入数据表,并创建压缩数据表
  3. 向原表和压缩数据表同时插入数据
  4. 查询性能对比:选择InnoDB和MyISAM的压缩方式下的查询性能对比

以上两个示例都是MySQL数据压缩性能方面的具体应用。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:mysql的数据压缩性能对比详情 - Python技术站

(0)
上一篇 2023年5月19日
下一篇 2023年5月19日

相关文章

  • mysql处理添加外键时提示error 150 问题的解决方法

    首先我们需要了解一些概念: 外键:数据库中,一个表的外键可以关联到另一个表的主键。在使用外键时,若子表中的外键引用了主表中不存在的值,则会报错。 error 150:这是MySQL中“添加外键失败”的常见错误提示,通常是由于外键定义不当导致的。 解决方法如下: 确认外键关联的主表和子表均使用InnoDB存储引擎 首先,我们需要确认外键关联的主表和子表均使用I…

    MySQL 2023年5月18日
    00
  • SQL注入是什么?SQL注入原理及预防方法

    SQL注入是一种针对Web应用程序的攻击方法,攻击者通过注入恶意的SQL语句来获取或修改数据库中的数据。攻击者可以利用各种SQL注入技术来执行操作,包括数据盗取、数据修改和数据删除等。 SQL注入是利用了应用程序对用户输入数据的不充分验证,把恶意的SQL代码注入到应用程序的查询语句中,通过这种方式来控制或者破坏数据库的行为 SQL注入攻击是Web应用程序最常…

    MySQL 2023年3月10日
    00
  • MYSQL子查询和嵌套查询优化实例解析

    MYSQL子查询和嵌套查询优化实例解析 什么是子查询和嵌套查询 子查询指的是一个查询语句中包含了另一个查询语句,而被包含的查询语句就称为子查询,主查询则被称为外层查询。子查询可以包含在where子句、select语句中和from子句等位置,用于过滤或计算数据。 嵌套查询则是指子查询与主查询嵌套在一起的查询语句,嵌套查询需要在子查询中使用主查询返回的数据,所以…

    MySQL 2023年5月19日
    00
  • MySQL Buffer Pool怎么提高页的访问速度

    这篇文章主要介绍了MySQL Buffer Pool怎么提高页的访问速度的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇MySQL Buffer Pool怎么提高页的访问速度文章都会有所收获,下面我们一起来看看吧。 如何提高SQL执行速度? 当我们想更新某条数据的时候,难道是从磁盘中加载出来这条数据,更新后再持久化到磁盘中吗? 如…

    MySQL 2023年4月11日
    00
  • Mysql sql慢查询监控脚本代码实例

    下面我将为您详细讲解 Mysql sql 慢查询监控脚本代码实例的完整攻略,该攻略将包含以下内容: 概述 脚本代码实现步骤 示例说明 示例1:监控所有数据库中执行时间超过 1 秒的 SQL 示例2:监控指定数据库中执行时间超过 0.5 秒的 SQL 1. 概述 Mysql 是一款常用的开源数据库系统,但在实际应用中,常常因为 SQL 语句不正确或者索引不合理…

    MySQL 2023年5月19日
    00
  • PHP读取MySQL中文乱码

    今天用PHP读取的MySQL中的中文内容字段,结果读取出来的居然乱码。 使用下面的语句设置连接编码,结果还是照旧。 $charset = $params[‘charset’]; mysql_query(‘SET character_set_connection=$charset, character_set_results=$charset, charact…

    MySQL 2023年4月13日
    00
  • php下MYSQL limit的优化

    下面是关于”php下MYSQL limit的优化”的完整攻略。 背景 在PHP中,MySQL是一个非常广泛使用的数据库管理软件。而MySQL中的LIMIT关键字用于控制返回结果集的数量,特别是在处理大量记录集时非常有用。然而,如果我们不谨慎使用LIMIT,它也可能导致性能问题。在本文中,我们将深入研究如何优化使用PHP中MySQL的LIMIT关键字。 问题 …

    MySQL 2023年5月19日
    00
  • MySQL属性SQL_MODE学习笔记

    最近在学习《MySQL技术内幕:SQL编程》并做了笔记,本博客是一篇笔记类型博客,分享出来,方便自己以后复习,也可以帮助其他人 SQL_MODE:MySQL特有的一个属性,用途很广,可以通过设置属性来实现某些功能支持 # 全局的SQL_MODE SELECT @@global.sql_mode; # 当前会话的SQL_MODE SELECT @@sessio…

    MySQL 2023年4月13日
    00
合作推广
合作推广
分享本页
返回顶部