美文网首页
丁奇-MySQL实战读书笔记16

丁奇-MySQL实战读书笔记16

作者: 布朗XD | 来源:发表于2021-02-12 00:57 被阅读0次

    “order by”是怎么工作的?

    1. 初始化 sort_buffer,确定放入 name、city、age 这三个字段;
    2. 从索引 city 找到第一个满足 city='杭州’条件的主键 id,也就是图中的 ID_X;
    3. 到主键 id 索引取出整行,取 name、city、age 三个字段的值,存入 sort_buffer 中;
    4. 从索引 city 取下一个记录的主键 id;
    5. 重复步骤 3、4 直到 city 的值不满足查询条件为止,对应的主键 id 也就是图中的 ID_Y;
    6. 对 sort_buffer 中的数据按照字段 name 做快速排序;
    7. 按照排序结果取前 1000 行返回给客户端。


      image.png
      image.png

    如果 MySQL 认为排序的单行长度太大会怎么做呢?

    max_length_for_sort_data,是 MySQL 中专门控制用于排序的行数据的长度的一个参数。它的意思是,如果单行的长度超过这个值,MySQL 就认为单行太大,要换一个算法。


    image.png

    区别在于排序只使用name和id,排序之后再去主键索引树中查询结果集。

    所以,我们可以在这个市民表上创建一个 city 和 name 的联合索引,对应的 SQL 语句是:

    alter table t add index city_user(city, name);
    
    image.png
    image.png

    最后再用覆盖索引优化一下即可。

    相关文章

      网友评论

          本文标题:丁奇-MySQL实战读书笔记16

          本文链接:https://www.haomeiwen.com/subject/ephdxltx.html