学过数据库理论的读者,都应该还记得关于CHAR和VARCHAR的性能对比:CHAR比VARCHAR更快,因为CHAR是固定长度的,而VARCHAR需要增加一个长度标识,处理时需要多一次运算。
针对这种情况,我做了一下基准测试,基准测试环境如下:
【硬件配置】
硬件 |
配置 |
CPU |
Intel(R) Xeon(R) CPU E5620 主频2.40GHz, 物理CPU 2个,逻辑CPU 16个 |
内存 |
24G(6块 * 4G DDR3 1333 REG) |
硬盘 |
300G * 3个,SAS硬盘 15000转,无RAID,有RAID卡,且开了回写功能 |
OS |
RHEL5 |
MySQL |
5.1.49/5.1.54 |
【MySQL配置】
配置项 |
配置 |
innodb_buffer_pool_size |
18G |
innodb_log_file_size |
200M |
innodb_log_files_in_group |
3 |
sync_binlog |
100 |
innodb_flush_log_at_trx_commit |
2 |
【表配置】
VARCHAR平均长度200,CHAR长度250,其它配置如下:
配置项 |
配置 |
记录数 |
1000万,2000万,5000万,1亿 |
存储引擎 |
Innodb |
行格式 |
compact |
性能测试结果如下:
【更新】更新时VARCHAR也是随机长度
测试结果展现了一个与理论不太相符的现象:当表大小小于Innodb buffer pool时,CHAR和VARCHAR没有差别,而在表大小大于Innodb buffer pool时,VARCHAR性能反而更高!这是为什么呢?
首先,性能是综合硬件、配置、表记录数、业务模型等多种因素综合后的结果,单一因素的差异,对整体来说可能几乎没有影响;
例如,执行一个操作需要100ms,而CHAR 比 VARCHAR性能上只快了1微秒,那么最终的性能就不会有影响。
这就是当Innodb buffer pool足够大时,CHAR 和VARCHAR没有差别的原因。
再次,理论上CHAR比VARCHAR快的根本原因是站在CPU的角度来说的,但性能是综合各种因素后的最终结果,当Innodb buffer pool小于表大小时,"磁盘读写"成为了性能的关键因素,而VARCHAR更短,因此性能反而比CHAR高。
最后,有朋友可能会认为,VARCHAR更新时如果新的数据比旧的数据要长,可能需要移动数据,导致性能更低;从实测结果来看,这种操作对最终的性能也是没有明显影响的。应该是因为Innodb采用页管理数据,数据移动是先在内存里完成,再写到磁盘,因此数据即使移动也很快。
【应用技巧】
基于以上测试结果和分析,我个人认为一般情况下优先使用VARCHAR,特别是字符串的平均长度比最大长度要小很多的情况;
当然,如果你的字符串本来就很短,例如只有10个字符,那么就优先选CHAR了
转载自: http://tech.uc.cn/?p=1910
相关推荐
### MySQL 数据库设计实践 #### 一、MySQL介绍 MySQL是一种关系型数据库管理系统,由瑞典MySQL AB公司开发,目前属于Oracle公司。它以其高性能、高可靠性和易用性而受到广泛欢迎,尤其适合Web应用程序。 - **连接...
MySQL的InnoDB存储引擎在处理大量数据和高并发事务时,其性能调优至关重要。以下是一些关于如何配置和优化InnoDB性能的关键提示: 1. **监控InnoDB状态**: 使用`SHOW INNODB STATUS`命令可以查看InnoDB引擎的状态...
在MySQL数据库中,CHAR和VARCHAR是两种常见的字符串数据类型,它们在存储和处理方式上有着显著的区别,这对于数据库设计和性能优化至关重要。 首先,CHAR是一种固定长度的数据类型。这意味着无论你存储的实际数据有...
MySQL支持多种数据类型,包括整数类型(TINYINT、SMALLINT、MEDIUMINT、INT、BIGINT)、浮点数类型(FLOAT、DOUBLE)、字符串类型(CHAR、VARCHAR、TEXT)、日期和时间类型(DATE、TIME、DATETIME、TIMESTAMP)以及...
MySQL数据库性能调优是一项关键任务,特别是在大数据量和高并发环境下,性能优化显得尤为重要。本文由王晓华针对MySQL数据库性能调优进行了深入分析,主要探讨了数据类型的选择和存储引擎的影响,并给出了实际操作...
MySQL数据库的性能优化是数据库管理中的重要议题,其目的是通过一系列策略和技术提升数据库的响应速度和处理能力。本文主要从8个方面详细介绍了优化MySQL性能的方法。 首先,选取最适用的字段属性至关重要。在设计...
MySQL数据库中的`CHAR`和`VARCHAR`是两种常见的字符型数据类型,它们在存储和处理方式上有显著区别,对数据库性能和存储空间有着直接影响。理解它们的差异对于优化数据库设计至关重要。 `CHAR`数据类型是固定长度的...
以上实践旨在帮助开发者在实际开发过程中避免性能陷阱,提高MySQL数据库的运行效率。在使用时,需结合MySQL的实际运行环境和业务需求,灵活应用这些技巧。同时,深入理解MySQL的工作原理和索引机制,是提高优化效果...
### 完全优化MySQL数据库性能的八大巧方法 在当今数据驱动的世界中,数据库的性能优化对于确保应用程序的高效运行至关重要。MySQL作为一种广泛使用的开源关系型数据库系统,其性能优化一直是开发者关注的重点。本文...
根据提供的标题、描述以及部分内容,我们可以总结出一系列MySQL数据库中的常用命令及操作。MySQL是一种广泛使用的开源关系型数据库管理系统(RDBMS),因其高效性、可靠性和灵活性而在多种应用场景中受到青睐。下面将...
MySQL数据库设计与优化是数据库管理中的重要环节,它关乎到系统的性能、稳定性和可扩展性。本讲座由叶金荣分享,主要涵盖了多个关键方面,包括规范、基础规范、命名规范、库表规范、字段规范、索引规范以及开发环境...
MySQL数据库的性能优化是数据库管理的关键环节,尤其在大数据量的场景下,高效的数据库操作能够显著提升系统的响应速度和整体性能。以下是从标题和描述中提取的八大优化策略的详细说明: 1. **选择合适的字段属性**...
MySQL作为一种广泛使用的开源关系型数据库管理系统,其设计的好坏直接影响着系统的性能、稳定性和可维护性。因此,合理的数据库设计对于确保应用程序能够高效运行至关重要。 #### 二、数据库设计规范 ##### 基础...
9.mysql 中 varchar 与 char 的区别以及 varchar(50)中的 50 代表的涵 义?10.MySQL 中 InnoDB 支持的四种事务隔离级别名称,以及逐级之间的区 别?11.表中有大字段 X(例如:text 类型),且字段 X 不会经常更新,...
MySQL数据库在面试中常常涉及许多核心概念和技术,包括数据类型的选择、存储引擎的差异、SQL优化策略以及数据库的基本操作。以下是对这些知识点的详细解释: 1. **VARCHAR与CHAR的区别**: - VARCHAR是一种可变...
在设计数据库时,需要了解 MySQL 的基本数据类型,包括 char、varchar、int、float 等。此外,还需要了解空值的概念,包括 NULL、NOT NULL 等。 四、 表结构设计 在设计表结构时,需要了解字段类型、字段长度、...
接着,我们需要熟悉MySQL的数据类型,包括数值类型(如INT、FLOAT、DECIMAL)、字符串类型(VARCHAR、CHAR)、日期时间类型(DATE、TIME、DATETIME、TIMESTAMP)以及二进制类型(BLOB、TEXT)。理解这些数据类型及其...