非驱动表查询排序不走索引,速度很慢;Mysql FIELD方法、order by..超慢

问题遇到的现象和发生背景

遇到的问题:
非驱动表 查询排序不走索引,速度很慢。
查询视图的时候,order by 非常的慢。

现象:
Mysql中,多表进行left join(视图)查询,使用了Order By FIELD() 函数进行指定排序,发现不走索引了,导致查询速度很慢。

需求背景:
按照创建时间倒序或者正序排列,请求审核的默认放在最下方。

用代码块功能插入代码,请勿粘贴截图
explain SELECT *
 FROM vi_orderinfo b
WHERE 1= 1
  and b.Status!= 5
ORDER BY 
 FIELD(b.Type,0,4,1,2,3) ,
        b.CreatedAt DESC;
运行结果及报错内容

现状:

  • f 表 Type字段有索引 : NON-Type
  • f (非驱动表)表 与 a 表(驱动表),关联关系: a JOIN f ON f.OrderId = a.Id
  • 我需要指定排序,Type=1,2,3 查询出的结果集 要放到最后展示

    img

我的解答思路和尝试过的方法
  1. CASE WHEN
    查询出来的也很慢,不走索引

    SELECT
       * , case when b.Type in (1,2,3) then 1 else 0 END AS RequestReviewType
    FROM
      vi_orderinfo  b 
    WHERE
       1=1  and b.Status != 5
    ORDER BY 
      RequestReviewType  ASC,
       CreatedAt desc
    
  2. FIELD():
    第二个就改成了上方面的Demo,使用的函数FIELD()进行了制定排序。

  3. Jion:
    一开始是left jion ,后来改成jion了,大小结果集问题,inner jion 和jion一样,就写了jion。

  4. 驱动表 与 非驱动表 切换 (STRAIGHT_JOIN):
    这个方法没法子用,驱动表 a 别的地方大量在用,不能影响到其他模块的排序。

  5. 冗余字段、临时表、虚拟列 貌似都不行

我想要达到的结果

查询时间提升,这个时间太久了!