这个主要是索引选择问题,在这个 SQL 里,如果用 _id = x order by b.end_time 可以直接利用 (_id, end_time) 这个索引。
但是如果用 _id in (x) order by b.end_time 这种方式查询,在 3.0.x 版本中只能够用 (_id, end_time) 索引来过滤数据或者使用 (end_time) 索引来 KeepOrder。
这个问题已经在 4.0 版本进行了优化,当 in 语句内只有一个值的时候,TiDB 会自动将其改写为等值条件。