高性能MySQL(3th)(第六章 sql优化) —— 06 查询优化器的工作
一 优化器在MySQL架构中的位置:
二 先看逻辑上的作用
一言以蔽之:找到最好的执行计划。
三 静态优化和动态优化
这个和一般的编译器优化的区别差不多,静态优化即语法上的转换,替换常量等等,动态优化则要考虑实时的运行状态,选择最优的执行路线。
四 优化器常见的工作
简单的表达式中进行常量的等价替换:
MIN MAX COUNT:
外连接转化为内连接:
这里有个补充的小知识,内连接 左外连接 右外连接 全外连接 自然连接在结果上的区别,和在MySQL执行引擎运算过程上的区别。
连接查询时,where条件中对于连接列的限制,将会对两张都起作用,这样无论以哪张表为基础进行连接运算,该限制条件都能起到过滤的作用:
IN 的优化:
我们先从OR来认识一下where字句的过滤作用:
这里先不看为主键(索引)的id,只将其看作普通的一列,OR的过滤作用是这样的:
先按 type的方式(上例中是走全表扫描)进行扫描,对每一条记录,用where条件去筛选即判断是否符合该条件。对于多个OR而言,其实就是遍历这个OR序列,有一个满足则将该记录加入结果集,故复杂度为O(n)。
而就如上面的文字截图所述,MySQL对IN做了优化,将IN内的数值进行大小排序,这样扫描到一条记录时,就不用顺序遍历地去判断该值是否存在,直接走二分查找,复杂度为log(n),当然,这个对于IN有很多值时二者的效率区别才会显现出来。
其他的还有,但是这里不再展开:
高性能MySQL(3th)(第六章 sql优化) —— 06 查询优化器的工作相关推荐
- sql优化之查询优化器
本文大部分内容引用自代码搬运工.-MYSQL查询优化器 看本篇之前推荐看 innodb数据结构,缓冲区 熟悉数据库存数结构 MYSQL 逻辑结构 MySQL 使用典型的客户端/服务器(Client/S ...
- 高性能MySQL(3th)(第六章 sql优化) —— 01 减少冗余数据
一 查询冗余的条数 如实际前台只需要TOP10,但是查询时使用 LIMIT 100. 解决方案:使用需要的大小限制.e.g. LIMIT 10,或者至多 LIMIT 20. 二 查询冗余的的列 避免使 ...
- 第七十六章 SQL命令 TOP
文章目录 第七十六章 SQL命令 TOP 大纲 参数 描述 TOP int值 TOP和缓存查询 TOP和ORDER BY TOP 优化 TOP与聚合和函数 示例 第七十六章 SQL命令 TOP 指定返 ...
- MySQL之存储引擎及SQL优化
6.Mysql的体系结构概念 整个MySQL Server由以下组成 Connection Pool:连接组件(接受客户端请求,进行认证授权后处理) Management Services & ...
- 第六章-Hadoop优化与发展
第六章-Hadoop优化与发展 文章目录 第六章-Hadoop优化与发展 Hadoop探讨 HDFS HA HDFS Federation 资源调度框架YARN MapReduce1.0的缺陷 YAR ...
- 第四十六章 SQL函数 DAY
文章目录 第四十六章 SQL函数 DAY 大纲 参数 描述 第四十六章 SQL函数 DAY 返回日期表达式的月份日期的日期函数. 大纲 DAY(date-expression){fn DAY(date ...
- 第六章 SQL命令 CREATE INDEX(一)
文章目录 第六章 SQL命令 CREATE INDEX(一) 大纲 参数 描述 权限与锁 仅支持兼容性选项 索引名称 现有索引 表明 字段名称 嵌入对象中的字段(`%SerialObject`) 索引 ...
- 第十六章 SQL命令 CREATE TABLE(三)
文章目录 第十六章 SQL命令 CREATE TABLE(三) 字段数据约束 NULL和NOT NULL UNIQUE DEFAULT DEFAULT Keywords ON UPDATE Colla ...
- 第十六章 SQL函数 ABS
文章目录 第十六章 SQL函数 ABS 大纲 参数 描述 示例 第十六章 SQL函数 ABS 返回数值表达式的绝对值的数值函数. 大纲 ABS(numeric-expression){fn ABS(n ...
最新文章
- Python_summary
- Java连接open fire_java – 为什么我不能连接到openfire服务器?
- iview 下拉select样式_Vue.js相关:iview实现select tree树形下拉框的示例代码
- mysql标准时间,MySQL时间设置
- 【排序算法】计数排序
- Linux 2.6.39.1 Hello world 驱动总结
- 困惑我半年的一个问题终于解决了
- KVM详解(三)——KVM创建虚拟机
- 百度地图API学习之路(1)
- element-UI级联选择器的使用Cascader
- python题目-青蛙跳井口
- 论文写作中Word设置公式居中编号右对齐保姆级教程
- Python之利用marshmallow实现序列化与反序列化
- UVA 202 - Repeating Decimals(模拟)
- 百度糯米猴年初一夺冠 协同创新三大法器赢得漂亮
- C语言pixel函数小程序,C语言 getpixel()用法及代码示例
- 前端实现从视频中抽离出音频
- 第7章:OFDM 信道估计与均衡(4)
- iphone - - 怎么导出ipa文件
- 每日一练 JS30天挑战 数组操作实例