五大优化技术
1.查询重用
查询重用是指尽可能利用先前的执行结果,以达到节约查询计算全过程的时间并减少资源消耗的目的。
目前查询重用技术主要集中在两个方面:
    1)查询结果重用
        在缓存区中分配一块缓冲区,存放该SQL语句文本和最后的结果集,当同样的SQl输入时,立即把结果返回。
    2)查询计划的重用
        缓存一条查询语句的执行计划及其相应语法树结构。
查询重用利弊:
    1)利端:节约了CPU和IO消耗
    2)弊端:消耗很大的内存资源,同样的SQL不同用户获取的结果集可能不同
 
2.查询重写
查询重写思路:
1.将过程性查询转换为描述性的查询,如视图重写
2.将复杂的查询(如嵌套子查询、外连接消除、嵌套连接消除)尽可能转换为多表连接查询
3.将效率低的谓词转换为等价的效率高的谓词(如等价谓词重写)
4.利用等式和不等式的性质,简化WHERE、HAVING条件
查询重写有很多方法,这些是没有确定的、统一的规律,但重写的核心一定是“等价转换”,只有等价才能转换,这是需要特别强调的。
 
3.查询优化算法
 
什么是查询计划?
查询计划也称为查询树,它由一系列内部的操作符组成,这些操作符按一定的运算关系构成查询的一个执行方案。举个例子,我们想关联A、B、C等多表,可以采取表A和表B连接得到中间结果,然后再和另外的表C连接得到新的中间方式,直至所有表都被连接完毕。
 
查询计划,二叉树上的不同结点:
单表结点:
考虑单表的数据获取方式:
1.直接通过IO获得数据
2.通过索引获取数据
3.通过索引定位数据的位置再经过IO到数据块中获取数据
这是一个从物理存储到内存解析成逻辑字段的过程,即符合冯诺依曼体系结构的要求(外存数据读入内存才能被处理)
 
两表结点(两表连接结点)
 
多表结点:
考虑多表连接顺序如何构成代价最少的“执行计划”。决定是AB先连接还是BC先连接。
许多数据库采用左深树、右深树、紧密树三种方式或其中一部分对多表进行连接得到多种连接途径。
 
生成最优查询计划的策略:
1.基于规则优化
2.基于代价优化 总代价=CPU代价+IO代价
在生成查询计划的过程中,计算每条存取路径(存取路径主要包括以上三个“关系结点”)的花费,然后选择代价最小的作为子路径,这样直至所有表连接完毕得到一个完整的路径。Mysql和PostgreSQL就采取了基于规则和代价估算的查询优化策略。
 
4.并行查询
查询优化并行的条件:
1.系统中的可用资源
2.CPU的数目
3.运算中的特定代数运算符
 
在同一个SQL内,查询并行分为操作内并行和操作间并行
 
5.分布式查询
在分布式数据库系统中,查询策略优化是查询优化的重点
主要是数据传输策略,A,B两结点的数据进行连接(是A结点数据传输到B结点或是从B到A或是先各自进行过滤然后再传输等)和局部处理优化(传统的单结点数据库的查询优化技术)
 
数据的通信开销是优化算法考虑的主要因素,代价估算模型:总代价=I/O代价+CPU代价+通信代价

Mysql查询优化从入门到跑路(二)数据库查询优化技术总揽的更多相关文章

  1. Mysql查询优化从入门到跑路(三)查询的基本操作

    查询的基本操作 1.选择操作 对应的是限制条件,操作对象是二维表的行.     优化方式:选择操作下推     目的:尽量减少连接操作前的元租数,使得中间临时关系尽量少(元祖数少,连接得到的元组数就少 ...

  2. Mysql查询优化从入门到跑路(一)数据库与关系代数

    1.怎样才算是数据库?     ACID,是指在数据库管理系统中事务所具有的四个特性     1)原子性     2)一致性     3)隔离性     4)持久性       关系数据库,基于关系代 ...

  3. Spring全家桶系列–[SpringBoot入门到跑路]

    //本文作者:cuifuan Spring全家桶————[SpringBoot入门到跑路] 对于之前的Spring框架的使用,各种配置文件XML.properties一旦出错之后错误难寻,这也是为什么 ...

  4. 反手来个K8S入门到跑路

    layout: post title: 反手来个K8S入门到跑路 category: linux date: 2019-06-09 tags: linux k8s 反手来个K8S入门到跑路 前言 放假 ...

  5. TiDB入门(四):从入门到“跑路”

    前言 前面三章基本把 TiDB 的环境弄好了,也做了一下简单测试,有兴趣的同学可以看一下: TiDB 入门(一):TiDB 简介 TiDB 入门(二):虚拟机搭建 TiDB-Ansible 部署方案 ...

  6. mysql之SQL入门与提升(二)

    在mysql之SQL入门与提升(一)我们已经有了些许基础,今天继续深化 先造表 SET NAMES utf8;SET FOREIGN_KEY_CHECKS = 0; -- -------------- ...

  7. MySQL从删库到跑路_高级(二)——自定义函数

    作者:天山老妖S 链接:http://blog.51cto.com/9291927 一.自定义函数简介 自定义函数(user-defined function UDF)是一种对MySQL扩展的途径,其 ...

  8. MySQL从删库到跑路(二)——MySQL字符集与乱码解析

    作者:天山老妖S 链接:http://blog.51cto.com/9291927 一.字符集与编码 1.字符集简介 字符(Character)是各种文字和符号的总称,包括各国家文字.标点符号.图形符 ...

  9. MySQL从删库到跑路_高级(七)——事务和锁

    作者:天山老妖S 链接:http://blog.51cto.com/9291927 一.事务简介 1.事务简介 事务(Transaction)是指作为单个逻辑工作单元执行的一系列操作. 2.事物的特效 ...

随机推荐

  1. 牛客小白月赛4C——病菌感染

    链接:https://www.nowcoder.com/acm/contest/134/C 来源:牛客网 #include <bits/stdc++.h> using namespace ...

  2. ECMAScript 5 compatibility shims for legacy JavaScript engines

    ECMAScript 5 compatibility shims for legacy JavaScript engines https://github.com/es-shims/es5-shim

  3. C# 程序关闭托盘图标不会自动消失

    c#程序关闭托盘图标不会自动消失,进程的托盘图标却不能随着进程的结束而自动消失  必须将鼠标移到图标上面时才能消失?  请问如何才能做到图标随着进程的结束而自动消失呢(外部强行结束,如在任务管理器将其 ...

  4. 初识主席树_Prefix XOR

    主席树刚接触觉得超强,根本看不懂,看了几位dalao的代码后终于理解了主席树. 先看一道例题:传送门 题目大意: 假设我们预处理出了每个数满足条件的最右边界. 先考虑暴力做法,直接对x~y区间暴枚,求 ...

  5. 北京Uber优步司机奖励政策(12月23日)

    滴快车单单2.5倍,注册地址:http://www.udache.com/ 如何注册Uber司机(全国版最新最详细注册流程)/月入2万/不用抢单:http://www.cnblogs.com/mfry ...

  6. 成都Uber优步司机奖励政策(2月26日)

    滴快车单单2.5倍,注册地址:http://www.udache.com/ 如何注册Uber司机(全国版最新最详细注册流程)/月入2万/不用抢单:http://www.cnblogs.com/mfry ...

  7. Aop实现拦截方法参数

    对于spring框架来说,最重要的两大特性就是AOP 和IOC. 以前一直都知道有这两个东西,在平时做的项目中也常常会涉及到这两块,像spring的事务管理什么的,在看了些源码后,才知道原来事务管理也 ...

  8. ORB-SLAM(九)LocalMapping

    LocalMapping作用是将Tracking中送来的关键帧放在mlNewKeyFrame列表中:处理新关键帧,地图点检查剔除,生成新地图点,Local BA,关键帧剔除.主要工作在于维护局部地图, ...

  9. 【wx:if】小程序条件渲染的使用说明

    语法,以view为例: <view xw:if="{{条件}}">aaaa</view> <view xw:elif="{{条件}}&quo ...

  10. 【循环控制器】-(针对中间部分要循环的场景,相当于loadrunner的action部分)

    一般使用 setup线程组 + teardown组 针对中间要循环的部分   使用循环处理器    单独循环中间的部分,相当于loadrunner的action部分