mysql 字符串处理优化
周五下午,同事突然说有个存储过程要帮忙优化,就拿来看看,大概看了下:
数据库端需求:数据库中要存储一个AppID字段,对应一个Account可以自行设置自己的AppID(我就不从业务上多说了),
以前是根据逗号分隔符来存储,供前端展现的,展现和更新性能都没有问题。后台做运算时需要把这些逗号分隔符进行行转列同步给内存数据库。
随着业务量的增加,每个Account对应的AppID增加到了2W左右,与之带来了行转列的性能问题。
旧逻辑中是通过对存储AppID的逗号分隔符字段与App表进行Cross Join ,然后再用SubString来实现行转列。
在旧逻辑的基础上去掉Cross Join 的部分:
SET @app='**********'; -- 不贴出来了,2万多个逗号分隔符的ID
SELECT CAST(CAST(SUBSTRING_INDEX(SUBSTRING_INDEX(@app,',',AppID),',',-1) AS CHAR(10))AS SIGNED) AS AppID FROM `tbl_app`;
性能由原来的42s上提高到33秒,还是不行,离目标的3s之内相差甚远啊。
印象中这么小的数据量不至于耗费这么长时间,用.NET中的string.split方法试了一下,瞬间不到1s就拆分完毕。
现在储过程中解决了)。用的都是mysql的系统函数,评现在自己的技能(现在还没学会在mysql 中调用其它类型代码的方法,如果是MSSQL,早就写应用程序集成在存储过程中了)
计划周末查查怎么在Mysql中自定义函数算法呢,结果突发奇想了一种方法,其实行转列最后存储的是表,如果使用replace语法生成可以批量插入的Insert语法,完全可以实现。果断一试,1s内完成。
既然优化至3s内的需求实现了,就不着急了,不过还是对mysql字符处理函数的实现方式很好奇,有时间研究下。
现在回想起来,自己是陷入行转列非要用While循环之类的逐个剥离,这样高效,一直这样做,换了一种思考方式,答案可能离你不远。
这个行转列的方法也跟大家分享一下,希望没浪费大家时间。
mysql 字符串处理优化的更多相关文章
- MySQL 字符串索引优化方案
字符串建立索引的优化 1. 建立前缀索引 假设建立一个支持邮箱登录的用户表,对于邮件字段来说,可以有以下几种建立索引的方式: 直接对整个字符串建立索引 alter table SUser add in ...
- MySQL 调优/优化的 100 个建议
MySQL 调优/优化的 100 个建议 MySQL是一个强大的开源数据库.随着MySQL上的应用越来越多,MySQL逐渐遇到了瓶颈.这里提供 101 条优化 MySQL 的建议.有些技巧适合特定 ...
- 理解MySQL——索引与优化
转自:理解MySQL——索引与优化 写在前面:索引对查询的速度有着至关重要的影响,理解索引也是进行数据库性能调优的起点.考虑如下情况,假设数据库中一个表有10^6条记录,DBMS的页面大小为4K,并存 ...
- MYSQL查询语句优化
mysql的性能优化包罗甚广: 索引优化,查询优化,查询缓存,服务器设置优化,操作系统和硬件优化,应用层面优化(web服务器,缓存)等等.这里的记录的优化技巧更适用于开发人员,都是从网络上收集和自己整 ...
- mysql数据库性能优化(包括SQL,表结构,索引,缓存)
优化目标减少 IO 次数IO永远是数据库最容易瓶颈的地方,这是由数据库的职责所决定的,大部分数据库操作中超过90%的时间都是 IO 操作所占用的,减少 IO 次数是 SQL 优化中需要第一优先考虑,当 ...
- MYSQL之性能优化 ----MySQL性能优化必备25条
今天,数据库的操作越来越成为整个应用的性能瓶颈了,这点对于Web应用尤其明显.关于数据库的性能,这并不只是DBA才需要担心的事,而这更是我 们程序员需要去关注的事情.当我们去设计数据库表结构,对操作数 ...
- MySQL优化技巧之五(mysql查询性能优化)
对于高性能数据库操作,只靠设计最优的库表结构.建立最好的索引是不够的,还需要合理的设计查询.如果查询写得很糟糕,即使库表结构再合理.索引再合适,也无法实现高性能.查询优化.索引优化.库表结构优化需要齐 ...
- 浅谈MySQL 数据库性能优化
MySQL数据库是 IO 密集型的程序,和其他数据库一样,主要功能就是数据的持久化以及数据的管理工作.本文侧重通过优化MySQL 数据库缓存参数如查询缓存,表缓存,日志缓存,索引缓存,innodb缓存 ...
- 性能调优之MYSQL高并发优化
性能调优之MYSQL高并发优化 一.数据库结构的设计 如果不能设计一个合理的数据库模型,不仅会增加客户端和服务器段程序的编程和维护的难度,而且将会影响系统实际运行的性能.所以,在一个系统开始实施之 ...
随机推荐
- spring mvc 和 velocity整合
java.lang.ClassNotFoundException: org.springframework.ui.velocity.VelocityEngineFactory 考虑是不是没有添加spr ...
- Error Domain=com.alamofire.error.serialization.response Code=-1016 "Request failed: unacceptabl
在使用AFNetworking 2.0 的时候本来一切很顺畅,但是中途遇到几个比较坑的地方 这里分享一下爬坑经历,忘读者不能速爬坑! 在发送请求后,NSURLSessionDataTask一直报错 ...
- 响应式布局 Bootstrap(01)
1.是什么?Bootstrap,来自 Twitter,是目前最受欢迎的前端框架,Bootstrap 是基于 HTML.CSS.JAVASCRIPT 的,它简洁灵活,使得 Web 开发更加快捷 Boot ...
- Spring container vs SpringMVC container(webmvc container)
Difference between applicationContext.xml and spring-servlet.xml in Spring Framework Scenario 1 In c ...
- hive基本操作
hive级联删除数据库和表 drop database t1 cascade; hive创建临时表和插入 create table t1 as select * from achi; insert i ...
- ZeroClipboard实现复制
今天利用ZeroClipboard实现了批量复制ip到剪贴版的公里,第一种方式总是有错,需要点击两次才能成功复制,第二种方法成功.在这里记录下,方法一: $('#copy_ips').zclip({ ...
- 向mysql数据库中插入大二进制文件和大文本
@Test public void run() throws ClassNotFoundException, SQLException, FileNotFou ...
- jsp 错误码debug记录与总结
500: 编码错误: 无法向cookie中写入中文字符串 需要使用URLEncoder.Encode()在写入处进行转码,使用URLDecoder.decoder()在读取处进行解码 或者使用requ ...
- NHibernate系列文章六:NHibernate数据类型映射
摘要 NHibernate支持所有的数据库数据类型. 以SQL Server数据库为例,下表是NHibernate支持的SQL Server数据库最常见的数据类型对照表. 第一列是NHibernate ...
- 解决ubuntu中apache2的url大小写敏感问题。
cd /etc/apache2/mods-enabled ln -s ../mods-available/speling.load speling.load ln -s ../mods-availab ...