mysql 内置函数 效率_在MySQL语句中使用MySQL自带函数效率问题

如题,从我目前所见所知都是不要再sql语句中使用mysql自带的函数而去使用PHP中的函数,但是个人内心一直对这种说法不太信服,如果是这样 那么mysql自带函数存在的意义是什么呢?

回复内容:

如题,从我目前所见所知都是不要再sql语句中使用mysql自带的函数而去使用PHP中的函数,但是个人内心一直对这种说法不太信服,如果是这样 那么mysql自带函数存在的意义是什么呢?

用mysql自带函数有什么不好?

1.很可能造成where后的条件无法走索引

2.把一些php层面简单的业务逻辑交给mysql来做,加大了mysql的压力(尽管可能你看来执行一次sql语句影响很小),对小系统而言没什么。如果对于大型系统,那会是灾难。大型系统的瓶颈基本都在数据库层面难以扩展,php很容易的水平扩展,php不会是瓶颈,因此,尽可能的降低数据库的处理压力,包括减少查询次数通过cache来解决,减少每次查询的时间则通过索引以及尽可能的业务在php层面处理,mysql只做最基本简单的查询少使用自带函数。

那mysql自带函数为什么存在?

1. 比如一些数据初始化是可以用,或者存储过程等..

2. 小型系统可以使用mysql自带函数,反正没啥瓶颈

3. 不能因为大型系统不建议查询用自带函数就不提供,因为考虑到普遍的需求

比如php框架的ORM设计,很费资源又慢,大型系统也不建议用,小系统就随便用,方便又快速。

总结就是不能因为一些场景不建议用就不提供...方便快速的代价就是性能。

以上纯属个人观点...

每个工具都有自己的定位,以及特定的使用场景。如果不在其擅长的场景下使用很可能你会遇上很多的痛苦。下面尝试通过描述下mysql函数的使用场景来回答题主的问题。

先看看mysql的一些个性:

1:单表千万级别(优化到极致能达到亿级别)行记录存储,简单条件(最好条件上有索引,当然也需要看具体case)查询

2:mysql喜欢大内存(可以将大量的索引直接放到内存中),喜欢高性能IO(比如SSD)

3:高并发的时候,CPU资源消耗也是非常严重的。如果峰值请求的时候,给遇上一个mysql函数(需要CPU做计算),那就很可能因为一个简单mysql函数酿成了悲剧。mysql出事故的时候,load很容易飙到100+

下面再看我们系统的场景

1:mysql不是系统的瓶颈

该场景下可以随意的使用mysql提供的特性功能,例如msyql函数,多方便好用啊。较少了应用层的工作量。而且对你系统性能没有多大的影响。

举例说明:小型系统,请求量小,数据存储量小,mysql server内存充足,统计需求(一个sql跑一个晚上你也不担心)

2:mysql即将(或者正在)是系统的瓶颈

这个时候mysql最好仅仅当做存储来用,尽量不做任何额外的计算。优化的时候,会尽可能的把计算消耗的资源移到应用层去做。尽量保证mysql仅仅做储存工作。另外使用mysql函数很可能走不了索引,那个更悲剧了,这样系统更没办法抗住大并发。

给你举个例子

mysql的now()函数 ,看着是很简单的用法吧

当你把sql扔到mysql的时候 ,now()这个函数,如果你用的时区设置是system,每次要调用到linux的时间函数来返回结果

,而且会有mutex ,消耗OS的CPU资源

当你只是传入一个常量 、就可以减少很多无谓的调用啦

f68f2add0b68e4f9810432fce46917b7.png

本文原创发布php中文网,转载请注明出处,感谢您的尊重!

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值