一个小知识点
如果按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。就可以采用其他方式了。