文章目录

  • 生猛干货
  • 官方文档
  • 使用索引扫描来优化排序
    • 索引的列顺序和Order By子句的顺序完全一致
    • 索引中所有列的方向(升序、降序)和 order by子句完全相同
    • order by中的字段全部在关联表中的第一张表中
  • 搞定MySQL

生猛干货

带你搞定MySQL实战,轻松对应海量业务处理及高并发需求,从容应对大场面试


官方文档

https://dev.mysql.com/doc/

如果英文不好的话,可以参考 searchdoc 翻译的中文版本

http://www.searchdoc.cn/rdbms/mysql/dev.mysql.com/doc/refman/5.7/en/index.com.coder114.cn.html


使用索引扫描来优化排序

存储引擎: Innodb

重点: 优化排序 手段:利用索引

两个思路: 1 通过排序操作 、 2 按照索引顺序扫描数据


索引的列顺序和Order By子句的顺序完全一致

举几个例子

mysql> show create table rental \G;
*************************** 1. row ***************************Table: rental
Create Table: CREATE TABLE `rental` (`rental_id` int(11) NOT NULL AUTO_INCREMENT,`rental_date` datetime NOT NULL,`inventory_id` mediumint(8) unsigned NOT NULL,`customer_id` smallint(5) unsigned NOT NULL,`return_date` datetime DEFAULT NULL,`staff_id` tinyint(3) unsigned NOT NULL,`last_update` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,PRIMARY KEY (`rental_id`),UNIQUE KEY `rental_date` (`rental_date`,`inventory_id`,`customer_id`),KEY `idx_fk_inventory_id` (`inventory_id`),KEY `idx_fk_customer_id` (`customer_id`),KEY `idx_fk_staff_id` (`staff_id`),CONSTRAINT `fk_rental_customer` FOREIGN KEY (`customer_id`) REFERENCES `customer` (`customer_id`) ON UPDATE CASCADE,CONSTRAINT `fk_rental_inventory` FOREIGN KEY (`inventory_id`) REFERENCES `inventory` (`inventory_id`) ON UPDATE CASCADE,CONSTRAINT `fk_rental_staff` FOREIGN KEY (`staff_id`) REFERENCES `staff` (`staff_id`) ON UPDATE CASCADE
) ENGINE=InnoDB AUTO_INCREMENT=16050 DEFAULT CHARSET=utf8mb4
1 row in set (0.00 sec)ERROR:
No query specifiedmysql> explain select * from rental where rental_date > '2005-01-01' order by rental_id \G
*************************** 1. row ***************************id: 1select_type: SIMPLEtable: rentalpartitions: NULLtype: index              ---------------> 索引
possible_keys: rental_datekey: PRIMARYkey_len: 4ref: NULLrows: 16008filtered: 50.00Extra: Using where
1 row in set, 1 warning (0.00 sec)mysql> 

using where:表示优化器需要通过索引回表查询数据;
select * , 除了索引列,其他的字段都需要回表来获取,所以 是using where .

5.7.29 版本的mysql的存储引擎是 Innodb,对于Innodb来讲,逻辑顺序和主键顺序是一致的,所以可以利用主键来排序 ,上面 order by rental_id 就是利用主键来排序 。 看下 type: index


索引中所有列的方向(升序、降序)和 order by子句完全相同

我们知道,字段的默认是 ase 升序排列的。 如果order by 都使用升序的

using index condition:5.6加入 ,会先条件过滤索引,过滤完索引后找到所有符合索引条件的数据行,随后用 WHERE 子句中的其他条件去过滤这些数据行;

但是如果 order by inventory_id desc, customer_id 的话, Extra中出现了 Using filesort ,这说明了啥?

在使用order by关键字的时候,如果待排序的内容不能由所使用的索引直接完成排序的话,那么MySQL有可能就要进行“文件排序” 【其实并不是从文件中查找排序,不要误解】。


看下索引情况

最左侧的索引 rental_date 使用范围查询 来验证下

结论: 如果查询中有某个列的范围查询,则其右边所有列都无法使用索引


order by中的字段全部在关联表中的第一张表中



搞定MySQL

MySQL-索引优化篇(2)_使用索引扫描来优化排序相关推荐

  1. MySQL-索引优化篇(3)_利用索引优化锁

    文章目录 生猛干货 官方文档 利用索引优化锁 为什么索引能优化锁 演示 无索引的情况 (获取不同的数据 发生了阻塞) 有索引的情况 (获取不同的数据 未阻塞) 搞定MySQL 生猛干货 带你搞定MyS ...

  2. Mysql—索引③:优化篇(不仅仅是索引)

    回顾数据库服务器优化的过程 关于数据库调优的知识点非常分散.不同的DBMS,不同的公司,不同的职位,不同的项目遇到的问题都不尽相同. 虽然SQL查询优化的技术有很多,但是大方向上完全可以分成物理查询优 ...

  3. MySQL优化篇:单表索引失效

    文章目录 1.准备环境 2.全值匹配我最爱 2.最佳作前缀法则 3.不要在索引列上做任何计算 3.1 在查询列上使用了函数 3.2 在查询列上做了转换 4.索引列上不能有范围查询 5.尽量使用覆盖索引 ...

  4. MySQL-索引优化篇(1)_安装演示库 [前缀索引、联合索引、覆盖索引] explain参数

    文章目录 生猛干货 官方文档 安装演示数据库sakila 索引优化策略 索引列上不能使用表达式或者函数 前缀索引和索引列的选择性 前缀索引的创建 索引列的选择性 前缀索引的优缺点 联合索引 如何选择索 ...

  5. MySQL-索引优化篇(4)_索引的维护

    文章目录 生猛干货 官方文档 删除重复索引 删除冗余索引 检查重复和删除的索引 pt-duplicate-key-checker 查找未被使用的索引 更新索引统计信息 索引碎片整理 搞定MySQL 生 ...

  6. 聚集索引和非聚集索引的区别底层_数据库-索引相关

    一.什么是索引 在数据库中,索引的含义与日常意义上的"索引"一词并无多大区别(想想小时候查字典),它是用于提高数据库表数据访问速度的数据库对象. 总而言之,索引是一个排序的列表,在 ...

  7. 数据库表设计索引外键设计_关于索引的设计决策 数据库管理系统

    数据库表设计索引外键设计 Introduction: 介绍: The attributes whose values are required inequality or range conditio ...

  8. 贝叶斯优化神经网络参数_贝叶斯超参数优化:神经网络,TensorFlow,相预测示例

    贝叶斯优化神经网络参数 The purpose of this work is to optimize the neural network model hyper-parameters to est ...

  9. 贝叶斯优化python包_《用贝叶斯优化进行超参数调优》

    TPE CMAES 网格搜索 随机搜索 贝叶斯优化 用贝叶斯优化进行超参数调优 @QI ZHANG · JUL 12, 2019 · 7 MIN READ 超参数调优一直是机器学习里比较intract ...

最新文章

  1. GDPR:我们将如何对待你的数据?
  2. Ubuntu中Netbeans的中文问题彻底解决
  3. UA SIE545 优化理论基础1 例题3 凸多面体的表示与线性规划
  4. Python语言学习之数值、小数、空格那些事:python和数值、小数、空格的使用方法之详细攻略
  5. 不同语言编译的程序入口总结
  6. chrome扩展之3:一步步跟我学开发一个表单填写扩展
  7. 冒泡排序c语言(包含完整代码)
  8. java免费翻译api接口_多语言翻译api
  9. 蒙特卡洛方法(Monte-Carlo Simulation)
  10. mysql周德伟课后答案_MySQL数据库技术-周德伟
  11. word页边距调整步骤
  12. 物联16:4 ISO/IEC 14443-3 防冲突、防碰撞算法、Type A、Type B
  13. 5. C++ 抽象类
  14. android全屏保存壁纸,android设置全屏壁纸代码
  15. 基于查找表的正弦波生成的研究
  16. 1.1 n阶行列式子的定义
  17. 【转载】传统蓝牙协议栈 串口协议SPP
  18. (附源码)Springboot校园二手交易平台小程序 毕业设计191637
  19. Arduino STM32用NTC热敏电阻 OLED显示屏制作温度计
  20. 函数周期表丨EXCEPT

热门文章

  1. PyTorch的计算图和自动求导机制
  2. php下字符与二进制互转函数,PHP 字符串与二进制互转
  3. app.vue只执行一次吗_面包可以只发酵一次吗?
  4. amh支持java吗_AMH 6.0 发布,国内领先的云主机面板
  5. Leetcode 剑指 Offer 58 - II. 左旋转字符串 (每日一题 20210830)
  6. F5 BIG-IP 远程代码执行漏洞 CVE-2021-22986 虚拟机上复现
  7. Git 笔记:基本操作工作流程
  8. 文巾解题 292. Nim 游戏
  9. 文巾解题1738. 找出第 K 大的异或坐标值
  10. 深度学习核心技术精讲100篇(八十一)-NLP预训练模型ERNIE实战应用案例