MySQL-索引优化篇(2)_使用索引扫描来优化排序
文章目录
- 生猛干货
- 官方文档
- 使用索引扫描来优化排序
- 索引的列顺序和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)_使用索引扫描来优化排序相关推荐
- MySQL-索引优化篇(3)_利用索引优化锁
文章目录 生猛干货 官方文档 利用索引优化锁 为什么索引能优化锁 演示 无索引的情况 (获取不同的数据 发生了阻塞) 有索引的情况 (获取不同的数据 未阻塞) 搞定MySQL 生猛干货 带你搞定MyS ...
- Mysql—索引③:优化篇(不仅仅是索引)
回顾数据库服务器优化的过程 关于数据库调优的知识点非常分散.不同的DBMS,不同的公司,不同的职位,不同的项目遇到的问题都不尽相同. 虽然SQL查询优化的技术有很多,但是大方向上完全可以分成物理查询优 ...
- MySQL优化篇:单表索引失效
文章目录 1.准备环境 2.全值匹配我最爱 2.最佳作前缀法则 3.不要在索引列上做任何计算 3.1 在查询列上使用了函数 3.2 在查询列上做了转换 4.索引列上不能有范围查询 5.尽量使用覆盖索引 ...
- MySQL-索引优化篇(1)_安装演示库 [前缀索引、联合索引、覆盖索引] explain参数
文章目录 生猛干货 官方文档 安装演示数据库sakila 索引优化策略 索引列上不能使用表达式或者函数 前缀索引和索引列的选择性 前缀索引的创建 索引列的选择性 前缀索引的优缺点 联合索引 如何选择索 ...
- MySQL-索引优化篇(4)_索引的维护
文章目录 生猛干货 官方文档 删除重复索引 删除冗余索引 检查重复和删除的索引 pt-duplicate-key-checker 查找未被使用的索引 更新索引统计信息 索引碎片整理 搞定MySQL 生 ...
- 聚集索引和非聚集索引的区别底层_数据库-索引相关
一.什么是索引 在数据库中,索引的含义与日常意义上的"索引"一词并无多大区别(想想小时候查字典),它是用于提高数据库表数据访问速度的数据库对象. 总而言之,索引是一个排序的列表,在 ...
- 数据库表设计索引外键设计_关于索引的设计决策 数据库管理系统
数据库表设计索引外键设计 Introduction: 介绍: The attributes whose values are required inequality or range conditio ...
- 贝叶斯优化神经网络参数_贝叶斯超参数优化:神经网络,TensorFlow,相预测示例
贝叶斯优化神经网络参数 The purpose of this work is to optimize the neural network model hyper-parameters to est ...
- 贝叶斯优化python包_《用贝叶斯优化进行超参数调优》
TPE CMAES 网格搜索 随机搜索 贝叶斯优化 用贝叶斯优化进行超参数调优 @QI ZHANG · JUL 12, 2019 · 7 MIN READ 超参数调优一直是机器学习里比较intract ...
最新文章
- GDPR:我们将如何对待你的数据?
- Ubuntu中Netbeans的中文问题彻底解决
- UA SIE545 优化理论基础1 例题3 凸多面体的表示与线性规划
- Python语言学习之数值、小数、空格那些事:python和数值、小数、空格的使用方法之详细攻略
- 不同语言编译的程序入口总结
- chrome扩展之3:一步步跟我学开发一个表单填写扩展
- 冒泡排序c语言(包含完整代码)
- java免费翻译api接口_多语言翻译api
- 蒙特卡洛方法(Monte-Carlo Simulation)
- mysql周德伟课后答案_MySQL数据库技术-周德伟
- word页边距调整步骤
- 物联16:4 ISO/IEC 14443-3 防冲突、防碰撞算法、Type A、Type B
- 5. C++ 抽象类
- android全屏保存壁纸,android设置全屏壁纸代码
- 基于查找表的正弦波生成的研究
- 1.1 n阶行列式子的定义
- 【转载】传统蓝牙协议栈 串口协议SPP
- (附源码)Springboot校园二手交易平台小程序 毕业设计191637
- Arduino STM32用NTC热敏电阻 OLED显示屏制作温度计
- 函数周期表丨EXCEPT
热门文章
- PyTorch的计算图和自动求导机制
- php下字符与二进制互转函数,PHP 字符串与二进制互转
- app.vue只执行一次吗_面包可以只发酵一次吗?
- amh支持java吗_AMH 6.0 发布,国内领先的云主机面板
- Leetcode 剑指 Offer 58 - II. 左旋转字符串 (每日一题 20210830)
- F5 BIG-IP 远程代码执行漏洞 CVE-2021-22986 虚拟机上复现
- Git 笔记:基本操作工作流程
- 文巾解题 292. Nim 游戏
- 文巾解题1738. 找出第 K 大的异或坐标值
- 深度学习核心技术精讲100篇(八十一)-NLP预训练模型ERNIE实战应用案例