mysql in 查询 按in的顺序来排序

一个小知识点

如果按in查询时,想让结果记录按照in里的记录顺序排序。

举例:SQL: select * from table where id IN (3,9,6);

查询结果的属性,会按记录id 3、6、9的顺序配置。这时我想让记录按照in里的3、9、6来排序。

mysql为我们提供了这个功能:SQL select * from table where id IN (3,9,6) order by field(id,3,9,6);

语法:FIELD(str,str1,str2,str3,…)

但是有文章指出这样的写法有性能问题,所有简单的场景可以应用,如果记录太多,请谨慎使用。

关于性能的问题:

“Returns the index (position) of str in the str1, str2, str3, … list. Returns 0 if str is not found.
排序过程:把选出的记录的 id 在 FIELD 列表中进行查找,并返回位置,以位置作为排序依据。
这样的用法,会导致 Using filesort,是效率很低的排序方式。除非数据变化频率很低,或者有长时间的缓存,否则不建议用这样的方式排序。“
使用explain测试会导致using filesort。就可以采用其他方式了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

天天

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值