假设表tableX 有 id(primary key) name ,age, phone, 都有索引
如果这样查询: select phone from tableX where name='Dennis' order by age
这个过程应该是
name index 找到所有符合 Dennis 的 id ,记为集合 Setage index 给集合 Set 排序phone但第二步是怎么实现的呢?
我觉得有一种可能是直接在 age 的索引 b+树里面顺序扫描,看扫描到的 id 是不是在 Set 里面,如果是就加入到一个列表。那么这个列表里面就是按照 age 排序号的 id
但这样和顺序扫描有什么区别吗?为什么要用索引呢?
|  |      1lambdaq      2022-12-01 11:29:39 +08:00 为什么 Java 父类构造函数调用被重写的方法会调用到子类的 mysql 里面会自动为没有主键的表创建聚簇索引吗? mysql 里面 order by columnA 为什么能利用 columnA 的索引 SpringSecurity 前后端分离的情况下,如何防止 CSRF 攻击? 好家伙。v2ex 大学码农培训学校毕业。。。。 | 
|      2optional      2022-12-01 11:30:04 +08:00 via iPhone 你说的 123 不会同时实现的,要么用 name index 筛选再排序,要么用 age index 按顺序扫描,过滤记录。 | 
|  |      3fgwmlhdkkkw      2022-12-01 14:29:23 +08:00  2 @lambdaq #1 惹人厌 | 
|      4zhzy0077      2022-12-01 17:47:49 +08:00 同意 2L 的说法 这里直接 建立 Name ASC, Age ASC 的索引然后 Include Phone  其实是最好的 MySQL 没有 include 的话就 name, age, phone 好了 | 
|  |      5dog82      2022-12-01 18:07:26 +08:00 不一定能利用 columnA 得索引,因为查询计划都是基于 CBO 的 查询优化有点玄学,受各种条件影响,但是底层的原理摸清楚后,就不会问这种问题了 | 
|      6victorc      2022-12-01 23:51:34 +08:00 你 explain 看看结果,目测会有 file sort ,也就是用不到 columnA 的索引 你这种情况应该创建 name_age 的联合索引,这个 query 排序就可以利用索引了 |