美文网首页MySQL
06-Explain实战-ORDER BY

06-Explain实战-ORDER BY

作者: 紫荆秋雪_文 | 来源:发表于2021-04-21 11:16 被阅读0次

一、SQL

1.1、创建表

CREATE TABLE test03(
id INT PRIMARY KEY NOT NULL auto_increment,
c1 CHAR(10),
c2 CHAR(10),
c3 CHAR(10),
c4 CHAR(10),
c5 CHAR(10)
)

1.2、添加数据

INSERT INTO test03(c1, c2, c3, c4, c5) VALUES('a1', 'a2', 'a3', 'a4', 'a5')
INSERT INTO test03(c1, c2, c3, c4, c5) VALUES('b1', 'b2', 'b3', 'b4', 'b5')
INSERT INTO test03(c1, c2, c3, c4, c5) VALUES('c1', 'c2', 'c3', 'c4', 'c5')
INSERT INTO test03(c1, c2, c3, c4, c5) VALUES('d1', 'd2', 'd3', 'd4', 'd5')
INSERT INTO test03(c1, c2, c3, c4, c5) VALUES('e1', 'e2', 'e3', 'e4', 'e5')

1.3、创建索引

CREATE INDEX idx_test03_c1234 ON test03(c1, c2, c3, c4)

二、ORDER BY

2.1、全索引查询

EXPLAIN SELECT * FROM test03 WHERE c1 = 'a1' AND c2 = 'a2' AND c3 = 'a3' AND c4 = 'a4'
全索引查询.png

2.2、ORDER BY - 索引断链

EXPLAIN SELECT * FROM test03 WHERE c1 = 'a1' AND c2 = 'a2' AND c4 = 'a4'
image.png
EXPLAIN SELECT * FROM test03 WHERE c1 = 'a1' AND c2 = 'a2' AND c4 = 'a4' ORDER BY c3
ORDER BY.png
  • c3没有起到查询作用
  • c3的作用只起到了排序

2.3、ORDER BY - 连续索引

EXPLAIN SELECT * FROM test03 WHERE c1 = 'a1' AND c2 = 'a2'
image.png
EXPLAIN SELECT * FROM test03 WHERE c1 = 'a1' AND c2 = 'a2' ORDER BY c3
image.png

2.4、ORDER BY - 索引跳隔

EXPLAIN SELECT * FROM test03 WHERE c1 = 'a1' AND c2 = 'a2' ORDER BY c4
image.png
  • 索引链中索引有间隔时出现 filesort

2.5、ORDER BY - 索引顺序跌倒

2.5.1、ORDER BY中索引顺序执行
EXPLAIN SELECT * FROM test03 WHERE c1 = 'a1' AND c2 = 'a2' ORDER BY c3, c4
ORDER BY中索引顺序执行.png
2.5.2、ORDER BY中索引顺序跌倒
EXPLAIN SELECT * FROM test03 WHERE c1 = 'a1' AND c2 = 'a2' ORDER BY c4, c3
ORDER BY中索引顺序跌倒.png
2.5.3、WHERE 中索引顺序跌倒
EXPLAIN SELECT * FROM test03 WHERE c2 = 'a2' AND c1 = 'a1' ORDER BY c3, c4
image.png
  • 在 WHERE 条件总 索引顺序不会影响效率
  • 在 ORDER BY 中 索引的顺序会影响效率
2.5.4、WHERE 中索引与参与ORDER BY
EXPLAIN SELECT * FROM test03 WHERE c1 = 'a1' AND c2 = 'a2' AND c3 = 'c3' ORDER BY c3, c4
WHERE 中索引与参与ORDER BY.png
EXPLAIN SELECT * FROM test03 WHERE c1 = 'a1' AND c2 = 'a2' AND c3 = 'c3' ORDER BY c4, c3
image.png
EXPLAIN SELECT * FROM test03 WHERE c1 = 'a1' AND c2 = 'a2' ORDER BY c2, c4
image.png
EXPLAIN SELECT * FROM test03 WHERE c1 = 'a1' AND c3 = 'c3' ORDER BY c3, c4
image.png
EXPLAIN SELECT * FROM test03 WHERE c1 = 'a1' AND c3 = 'c3' ORDER BY c4, c3
image.png
EXPLAIN SELECT * FROM test03 WHERE c1 = 'a1' AND c3 = 'c3' ORDER BY c3
image.png
EXPLAIN SELECT * FROM test03 WHERE c1 = 'a1' AND c3 = 'c3' ORDER BY c4
image.png
  • 在索引没有缺失的情况下
    • ORDER BY 中的顺序跌倒不会导致filesort
  • 在索引缺失的情况下
    • ORDER BY中索引缺失,会造成 filesort
    • WHERE 中 索引缺失,在有ORDER BY情况下有可能也会造成 filesort

相关文章

  • 06-Explain实战-ORDER BY

    一、SQL 1.1、创建表 1.2、添加数据 1.3、创建索引 二、ORDER BY 2.1、全索引查询 2.2、...

  • MySQL order by 需要注意什么

    原文《MySQL实战45讲》 前言 ​ 程序开发,你一定会碰到需要排序的需求,这时order by 就派上用场...

  • springcloud 分布式链路追踪 sleuth+zipki

    分布式链路追踪实战步骤: 创建注册中心 --eureke 创建服务提供者product 创建服务消费者order ...

  • MySQL实战 | 16 order by的工作原理

    有如下 SQL 语句: 执行流程是怎样的? 全字段排序 MySQL 会给每个线程分配一块内存用于排序,称为 sor...

  • springmvc 03 HiddenHttpMethodFil

    示例: /order/1 HTTP GET:得到id=1的order/order/1 HTTP DELETE:删除...

  • 订单

    提交订单POST: /order/add 订单列表GET: /order/list 返回数据:[{order_id...

  • mysql:group by,order by

    mysql:group by,order by order by order by是用于支持字段的关键字 表结构如...

  • MySQL 排序

    SQL 语言中使用 ORDER BY 进行排序 1. ORDER BY 语句 ORDER BY 语法规则: 示例:...

  • 维表join

    kafka topic为order中数据格式 mysql order_detail表ddl order_detai...

  • order by 、limit

    排序:Order by select * from company order by salary asc; ...

网友评论

    本文标题:06-Explain实战-ORDER BY

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