MySQL case when与if的性能探索

场景:

好奇心驱使的探索,实验结果可能并不严谨

控制变量法:同样MySQL5.7环境下,手写分组连续排名函数,第一组使用case when,第二组使用if,对14万数据排名,查看效率,代码如下。


代码部分

排名函数(CASE WHEN 方式):

SELECT
	CASE
	WHEN @pre_name = t.name THEN
		@cur_rank := @cur_rank + 1
	ELSE
		@cur_rank := 1
	END AS rank,
	@pre_name := t.name AS studentName,
	t.create_time
FROM
	student_score t,
	(SELECT @pre_name := NULL, @cur_rank := 0) r
ORDER studentNameY t.name ASC, t.create_time DESC

排名函数(IF 方式):

SELECT
	IF(@pre_name = t.name, @cur_rank := @cur_rank + 1, @cur_rank := 1) AS rank,
	@pre_name := t.name AS studentName,
	t.create_time
FROM
	student_score t,
	(SELECT @pre_name := NULL, @cur_rank := 0) r
ORDER studentNameY t.name ASC, t.create_time DESC

查询速度:

case when方式,执行速度稳定在0.27s-0.29s之间。如图:
在这里插入图片描述
if方式,执行速度稳定在0.42s-0.48s之间。如图:
在这里插入图片描述


总结:

数据量较大情况下,CASE WHEN 的效率更高,IF效率略低一些
0.2s的性能提升可能不是很大,但聚少成多就能给用户更好的体验。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值