zoukankan      html  css  js  c++  java
  • Mysql查询优化从入门到跑路(二)数据库查询优化技术总揽

    五大优化技术
    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代价+通信代价
  • 相关阅读:
    preventDefault()、stopPropagation()、return false 之间的区别
    angular $q服务的用法
    Introduction
    软件工程第一次作业
    整除光棍(天梯)
    遍历数据文件目录music中的所有歌单,提取歌曲名称以及对应的标签,并进行统计。统计各个标签的歌曲数目,并在每个标签下找出出现次数最多的3首歌曲,写入到excel表格中:
    Python中字符串的format
    Kafka设计原理总结
    Dubbo源码分析
    浅谈HTTPS传输过程
  • 原文地址:https://www.cnblogs.com/WardSea/p/7496780.html
Copyright © 2011-2022 走看看