博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
mysql in 查询 按in的顺序来排序
阅读量:4217 次
发布时间:2019-05-26

本文共 567 字,大约阅读时间需要 1 分钟。

一个小知识点

如果按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。就可以采用其他方式了。

转载地址:http://venmi.baihongyu.com/

你可能感兴趣的文章
[hive]优化策略
查看>>
c++14现代内存管理
查看>>
右值引用,move语义和完美转发
查看>>
c++使用宏检测类是否包含某个函数或者变量属性
查看>>
CSS之Multi-columns的column-gap和column-rule
查看>>
CSS之Multi-columns的跨列
查看>>
CSS之浮动(一)
查看>>
CSS之浮动(二)
查看>>
AtomicInteger源码解析
查看>>
CopyOnWriteArraySet源码学习
查看>>
Openfiler 配置 NFS 示例
查看>>
Oracle 11.2.0.1 RAC GRID 无法启动 : Oracle High Availability Services startup failed
查看>>
Oracle 18c 单实例安装手册 详细截图版
查看>>
Oracle Linux 6.1 + Oracle 11.2.0.1 RAC + RAW 安装文档
查看>>
Oracle 11g 新特性 -- Online Patching (Hot Patching 热补丁)说明
查看>>
Oracle 11g 新特性 -- ASM 增强 说明
查看>>
Oracle 11g 新特性 -- Database Replay (重演) 说明
查看>>
Oracle 11g 新特性 -- 自动诊断资料档案库(ADR) 说明
查看>>
Oracle 11g 新特性 -- RMAN Data Recovery Advisor(DRA) 说明
查看>>
CSDN博客之星 投票说明
查看>>