首页 > 教育培训

sed在包含的字符串前加内容 mysql中怎样对大批量级的数据查询进行优化?

mysql中怎样对大批量级的数据查询进行优化?

mysql一直支持正则匹配,但直到mysql8.0才支持正则替换。以前这种场景要么在mysql端处理,要么在应用端取出数据进行处理。

例如,我想用dble替换表y1的str1列中第三个操作的子字符串。如何实现这一点?

1.自己写sql层存储函数。代码是这样写的:3dead,没有优化,只是作为演示,在mysql中非常不鼓励写这样的函数。

sed在包含的字符串前加内容 mysql中怎样对大批量级的数据查询进行优化?

关系型数据库

分隔符$$

使用;ytt`$$

如果存在,则删除函数`func_instr_simple_ytt`$$

createdefiner`root`@`localhost`func_instr_simple_ytt`(

f_strvarchar(1000),-参数1

f_substrvarchar(100),-参数2

f_replace_strvarchar(100),

f_timesint-times支持3。

)返回varchar(1000)

开始

声明v_resultvarchar(1000)默认ytt-result。

声明v_substr_lenintdefault0-搜索字符串长度。

设置f_times3-仅支持3。

设置v_substr_len长度(f_substr)

selectinstr(f_str,f_substr)into@p1-第一个实际位置。

selectinstr(substr(f_str,@p1v_substr_len),f_substr)进入@p2次虚拟位置。

selectinstr(substr(f_str,@p2@p12*v_substr_len-1),f_substr)into@p3-第三个虚拟位置。

如果@p1gt0安培@p2gt0安培@p3gt0,那么-好。

挑选

concat(substr(f_str,1,@p1@p2@p3(f_times-1)*v_substr_len-f_times)

,f_replace_str,

substr(f_str,@p1@p2@p3f_times*v_substr_len-2))转换为v_result

其他

setv_resultf_str-从未更改。

如果…就会结束

-清除所有会话变量。

set@p1null

set@p2null

set@p3null

返回v_结果

结束

$$

定界符

-调用函数进行更新:

mysqlgt更新y1设置str1func_instr_simple_ytt(str1,action,dble,3)

查询正常,20行受影响(0.12秒)

排match:20chang:20warnings:0

2.使用sed等工具导出以替换导入。步骤如下:(推荐)1)导出表y1中的记录。

mysqlmysqlgtselect*fromy1intooutfile/var/lib/mysql-files/y1.csvqu:/var/lib/mysql-files#sed-is/action/dble/3y1.csv

3)再次导入处理后的数据并完成。

关系型数据库

mysqlgt截断y1

查询正常,0行受影响(0.99秒)

mysqlgt将file/var/lib/mysql-files/y1.csv中的数据加载到表y1中

查询正常,20行受影响(0.14秒)

records:20d:0skipp:0

以上两种推荐出口再加工再进口,性能更高,你不你不必自己编写功能代码。然后mysql8.0很简单的实现了上面的场景,一个功能就搞定了。

mysqlmysqlgtupdatey1setstr1regexp_replace(str1,action,dble,1,3)查询正常,20行受影响(0.13秒)行match:20chang:20warnings:0

还有一个regexp_instr非常有用,特别是指出现的次数。例如,定义会话变量@a。

mysqlmysqlgtset@aaabbcceefilucy111bs234523556119101020301040查询正常,0行受影响(0.04秒)

获取该数字至少出现两次的第二个子字符串的位置。

mysqlmysqlgtselectr:digitech14-@.com]{2,},1,2)-|r:digitech16-@.com]{2,},1,2)|-|50|-集合中的1行(0.00秒)

那么让我们让我们看看如何支持多字节字符。

关系型数据库

mysqlgtset@a美国俄罗斯日本北京上海深圳广州上海武汉东莞北京青岛北京。

查询正常,0行受影响(0.00秒)

mysqlgtselectregexp_instr(@a,beijing,1,1)

-

|regexp_instr(@a,北京,1,1)|

-

|17|

-

集合中的1行(0.00秒)

mysqlgtselectregexp_instr(@a,beijing,1,2)

-

|regexp_instr(@a,beijing,1,2)|

-

|29|

-

集合中的1行(0.00秒)

mysqlgtselectregexp_instr(@a,beijing,1,3)

-

|regexp_instr(@a,beijing,1,3)|

-

|41|

-

集合中的1行(0.00秒)

综上,我提到了mysql8.0最有用的两个正则匹配函数,regexp_replac

awk怎么删除?

战略经济对话..e/[替换为string,don不写也不删]/g上面的文件名就是找一个类似**e的字符串,也可以写其他正则表达式,删除或者替换awk:awk{gsub(/a..e/,替换内容或为空);print}的文件名同上,删除功能可以通过将替换项写成空字符串来实现。

mysql数据sql层字符串正则

原文标题:sed在包含的字符串前加内容 mysql中怎样对大批量级的数据查询进行优化?,如若转载,请注明出处:https://www.bjhtrmyl.com/tag/26423.html
免责声明:此资讯系转载自合作媒体或互联网其它网站,「亨通号」登载此文出于传递更多信息之目的,并不意味着赞同其观点或证实其描述,文章内容仅供参考。