MySql性能提升心得

关于MySql的性能提升文章多如乱麻,每个人有不同的见解,但技术往往是殊途同归的,下面记录我自己的一点心得。

 

最近两个月每天都和数据库打交道,包括LevelDB,Redis,都有过了解,但每天都在使用的还是MySql,实话实说,在之前对MySql还只是处于知道怎么用,但是并不熟悉。

两个月下来,原本需要借助图形界面完成的一些操作,现在命令行完成也不费吹灰之力,基础的增删改查,性能的调优,都有了进一步的认识。

最大的进步是解决问题的思路以及宽度,感觉整个人的思维贯通了,当然,这里离不开帮助我的leader,总是不厌其烦的耐心的帮助我,这里感谢鑫哥,么么哒。

 

回归正传,MySql的性能影响有两部分

第一部分

计算机硬件,包括CPU,MEM,磁盘IO,其中占主要资源的是磁盘IO。

我在实际使用中,很明显的感到固态硬盘,机械硬盘,云服务器之间的区别。

他们之间的性能比类似于:1固态 = 2云服务器 = 20机械

硬件方面没什么好说的,无非是花钱。

 

第二部分

sql语句,开关sql连接,检测sql语法,索引,主键等等。

上述是最能够影响的性能的条件,根据数据量的大小,数据的操作,占比关系也在不断变化。

 

先说检测sql语法这一项,mysql的一条语句执行,会有一系列的底层操作,其中有一项操作是检测语法正确性。

设想一下,如果同一种操作,只让MySql检测一次,那效率岂不是大大提高了。

没错,MySql本身支持这种操作,具体实现有插入语句

INSERT INTO TABLE VALUES (*,*,*),(*,*,*)...

不过,此类操作有字节限制,经过测试,大概有百万字节的瓶颈,如果报错,可以分批插入数据。

修改操作

UPDATE re_3c0_3cg, sd_3c0_3cg
SET re_3c0_3cg.outtime = sd_3c0_3cg.time
WHERE re_3c0_3cg.txid=sd_3c0_3cg.txid and re_3c0_3cg.n=sd_3c0_3cg.vout

同样的目的,实现方法有万千种,上述的修改操作,性能提高几个数量级,1000w数据量大概是3分钟与三天(甚至更多)的区别。

 

开关sql的连接,这是老生常谈的问题了,如果项目是频繁的操作数据库,尽量不要关闭sql的DB连接,开放一个端口的代价,解放其他系统资源,自己考虑合不合算。

同样的,每一次实现一条语句,底层就是一次sql的通信,尽量减少通信次数。

经过测试,MySql的事务好像可以减少通信次数,这样一来,事务会比一系列的复杂操作性能高一些,不过有限。

 

主键与索引相同点是,都是为了提高查询速度。

主键与索引不同点是,主键会将主键列进行排序,索引会为每一个表的索引创建一个新表,用来存放索引的标签。

主键与索引都可以组合索引,但是主键需要主键列数据相加唯一,而索引可以不唯一。

建立了索引或主键的表在查询上面的速度是相当迅速的,相对而言带来的弊端是存储空间的增大,最要命的是插入性能下降的非常厉害,主键/索引适应的场景是高读低写。

考虑到大部分数据是需要先插入,再读取,再不停的更新的步骤,给大家一个建议,可以先插入到某一个阶段后,整体索引,这样提升的性能也是很高的。

 

最后一个是MySql的语句,讲真的,MySql的性能百分之99和语句有关系

作为一个还不精通MySql的小白,唯一能给出的建议是,当你需要操作大量数据时,首先去上网查查你想要操作的命令。

多加对比,经过测试后,确定你需要的语句。

并且代码写完后也不是一成不变的,感觉哪个地方效率低下就上网查一下,实在查不到就问一下身边有经验的老师傅。

三人行必有我师,不耻下问是你我成长必经之路。

 

好了,废话连篇,本次心得分享完毕打完收工。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值