MySQL字符函数的压力测试

本文涉及的产品
RDS MySQL DuckDB 分析主实例,集群系列 4核8GB
RDS MySQL DuckDB 分析主实例,基础系列 4核8GB
RDS AI 助手,专业版
简介: MySQL中的字符串处理函数非常多,以至于我在整理的这部分内容的时候也眼前一亮,有一种进了大观园的感觉,哦,原来有这个函数,哦,竟然可以这样实现,以前怎么没想到,等等。

MySQL中的字符串处理函数非常多,以至于我在整理的这部分内容的时候也眼前一亮,有一种进了大观园的感觉,哦,原来有这个函数,哦,竟然可以这样实现,以前怎么没想到,等等。


比如字符串查找函数,instr,locate,position三个函数的功能都是很相似的。如果要实现一个功能,从字符串foobarbar里面找到bar这个字符串的起始位置,使用Instr,locate,position都可以实现。


SELECT INSTR('foobarbar', 'bar');


SELECT LOCATE('bar', 'foobarbar');


SELECT POSITION('bar' IN 'foobarbar');


主要语法的表现形式不同,当然参数设置上还是有一些差别。


对于上面的3个函数,我有些纠结,到底用哪一个呢?推荐是哪一个呢?我觉得可以通过两种测试方式来得到一个初步的结论,第一个是高并发下多线程调用的性能情况,第二个是单线程执行的性能情况。如果在对比测试中高出一筹,还有什么理由不去推荐呢。


要实现这两个功能,MySQL缺失提供了这样的工具集,第一个是并发执行的性能情况,可以使用MySQL自带的mysqlslap来测试。


而第二个单线程的压测,则可以使用MySQL非常有特色的函数benchmark来实现。


如果使用myslap来压测,使用mysqlslap的语句类似下面的形式。


mysqlslap --concurrency=50,100 --create-schema="test" --query="SELECT POSITION('bar' in 'foobar');" --number-of-queries=50000


当然这里我们加大难度,一个是拼接的字符串要复杂,我们可以使用字符串函数repeat得到一个很长的字符串,比如concat(concat(repeat('abc',500),'foobarbar'),repeat('abc',500)) 就可以得到一个很长的字符串。


img_ee8ec566e71664601fdd24b830f221a3.jpe


通过这种方式得到的测试结果相对来说更有意义一些。


我们调大调用的频次为100万次,使用并发50和100来做测试。


position函数的结果


Benchmark


Average number of seconds to run all queries: 34.789seconds


Minimum number of seconds to run all queries: 34.789 seconds


Maximum number of seconds to run all queries: 34.789 seconds


Number of clients running queries: 50


Average number of queries per client: 20000


Benchmark


Average number of seconds to run all queries: 35.312 seconds


Minimum number of seconds to run all queries: 35.312 seconds


Maximum number of seconds to run all queries: 35.312 seconds


Number of clients running queries: 100


Average number of queries per client: 10000


可以看出在并发50和100的情况下,100的调用时间略长。


使用locate和Instr得到的结果相仿,都是36秒~37秒之间。


从100万次的测试中我们可以得到一个初步udev结论,那就是在这个场景中,position的性能相当要好一些。


而单线程的压测情况如何呢,我们使用benchmark来模拟。


比如压测md5的函数,就是这样的格式。


select benchmark( 500000000, md5( 'test' ) );


对于position和locate,instr,只是需要调整一下函数就可以了,我们还是指定为100万次。


position,locate,instr的性能结果是


1 row in set (8.23 sec)


1 row in set (8.21 sec)


1 row in set (8.23 sec)


可以看出来性能几乎是一样的,locate略微高一点点。


从这个测试也可以看出明显的性能差别,单线程压测的时候是8秒多,但是并发的时候就是36秒左右,这个差别其实很大了。

相关实践学习
如何快速连接云数据库RDS MySQL
本场景介绍如何通过阿里云数据管理服务DMS快速连接云数据库RDS MySQL,然后进行数据表的CRUD操作。
MySQL数据库入门学习
本课程通过最流行的开源数据库MySQL带你了解数据库的世界。   相关的阿里云产品:云数据库RDS MySQL 版 阿里云关系型数据库RDS(Relational Database Service)是一种稳定可靠、可弹性伸缩的在线数据库服务,提供容灾、备份、恢复、迁移等方面的全套解决方案,彻底解决数据库运维的烦恼。 了解产品详情: https://www.aliyun.com/product/rds/mysql 
目录
相关文章
|
10月前
|
测试技术 数据库 Python
解释测试中setup和teardown函数的应用。
总结起来,`setup`和 `teardown`函数就像扔宴会的主人,他们保障了宴会的流畅进行。他们是准备环境和清理现场的重要工作人员,他们的工作直接影响着我们的测试效率和质量。我们可以把 `setup`和 `teardown`想象成隐藏在幕后,默默为我们服务的工作者,他们做着我们需要但是往往忽视的工作。所以,下次当你写测试的时候,别忘了给你的 `setup`和 `teardown`留出足够的位置,因为他们的作用可能是你成功的保证。
226 14
|
9月前
|
SQL 关系型数据库 MySQL
MySQL 常用函数
我们这次全面梳理 MySQL 中的常用函数,涵盖 聚合函数、字符串函数、日期时间函数、数学函数 和 控制流函数 等五大类。每类函数均配有语法说明与实用示例,帮助读者提升数据处理能力,如统计分析、文本处理、日期计算、条件判断等。文章结尾提供了丰富的实战练习,帮助读者巩固和应用函数技巧,是进阶 SQL 编程与数据分析的实用工具手册。
608 2
|
12月前
|
SQL 关系型数据库 MySQL
【YashanDB知识库】MySQL field 函数的改写方法
【YashanDB知识库】MySQL field 函数的改写方法
|
11月前
|
SQL 缓存 关系型数据库
使用温InnoDB缓冲池启动MySQL测试
使用温InnoDB缓冲池启动MySQL测试
208 0
|
11月前
|
SQL 缓存 关系型数据库
MySQL8.4 Enterprise安装Firewall及测试
MySQL8.4 Enterprise安装Firewall及测试
366 0
|
11月前
|
安全 关系型数据库 MySQL
MySQL8使用物理文件恢复MyISAM表测试
MySQL8使用物理文件恢复MyISAM表测试
238 0
|
12月前
|
Oracle 关系型数据库 MySQL
使用崖山YMP 迁移 Oracle/MySQL 至YashanDB 23.2 验证测试
这篇文章是作者尚雷关于使用崖山YMP迁移Oracle/MySQL至YashanDB 23.2的验证测试分享。介绍了YMP的产品信息,包括架构、版本支持等,还详细阐述了外置库部署、YMP部署、访问YMP、数据源管理、任务管理(创建任务、迁移配置、离线迁移、校验初始化、一致性校验)及MySQL迁移的全过程。
|
SQL 关系型数据库 MySQL
Mysql-常用函数及其用法总结
以上列举了MySQL中一些常用的函数及其用法。这些函数在日常的数据库操作中非常实用,能够简化数据查询和处理过程,提高开发效率。掌握这些函数的使用方法,可以更高效地处理和分析数据。
368 19
|
12月前
|
SQL 关系型数据库 MySQL
【YashanDB知识库】MySQL field 函数的改写方法
本文来自YashanDB官网,介绍将MySQL的FIELD函数改写到YashanDB的方法。MySQL中,FIELD函数用于自定义排序;而在YashanDB中,可使用DECODE或CASE语句实现类似功能。示例展示对表`t1`按指定顺序排序的过程,提供两种改写方式,结果均符合预期。
|
SQL 关系型数据库 MySQL
【MySQL基础篇】盘点MySQL常用四大类函数
本文介绍了MySQL中的四大类常用函数:字符串函数、数值函数、日期函数和流程函数。
【MySQL基础篇】盘点MySQL常用四大类函数

推荐镜像

更多