MySQL字符函数的压力测试
公众号:杨建荣的学习笔记 · 作者:r14笔记第13天 · 发布:2017-10-16 00:00:34 · 原文链接

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)) 就可以得到一个很长的字符串。

