tidb 执行语句sort 问题

请问下各位老师,
遇到这么个情况,联合索引 index_x(a,b,c),语句的写法是select xxx from t where b=xx and c=xx and a between xxx and xxx order by a asc; 这条语句走的索引也是index_x这个联合索引
通过查看该语句的执行计划发现在tidb层做了个sort,其实按照传统单机数据库看的话,其实应该不需要做sort,tidb 之所以要做sort 是因为同时并发往多个tikv 扫描数据,然后这些数据返回到tidb的时候,数据就没有顺序,需要重新排序了,不知道这个理解对不对
请各位老师,帮忙指点下

因为tidb是分布式的,数据节点tikv是多个,每个tikv上的索引是有序的,但是所有节点合在一起,还是需要再次排序。
同一个索引包含多个region,数据不一定在同一个tikv节点。

我也是这么理解的

a 是范围了,应该建立index(b,c,a)

a是范围,但是a是有序的

要贴下执行计划。索引都是有序的,tidb在处理有有序数据的时候会在copr获取数据时候可以保持有序的获取数据(keep order=true),这样就不需要在tidb层做sort。发生了sort可能是优化器认为keep order = true的代价更高,但是不确认是否会对这里做代价判断。