zoukankan      html  css  js  c++  java
  • MySQL学习随笔--通过实例理解merge ,temptable算法的差异

    实例1

    使用视图的两种算法merge和temptable分别统计

    表tb_phone中market_price大于4000的手机,然后查询视图查找出小于6000的手机

    简单总结最终获取的结果:查询出market_price大于4000且小于6000的手机

    表数据:

    1. merge合并算法

      合并的执行方式,每当执行的时候,先将视图的sql语句与外部查询视图的sql语句,合并在一起,最终执行.

      以下是使用常规select语句模拟合并算法:

      执行结果模拟与算法的结果相同:

    2. temptable临时表算法

      先执行视图再执行其他操作的查询

      临时表模式,每当查询的时候,将视图所使用的select语句生成一个结果的临时表,再在当前的临时表内进行查询

      以下是使用常规select语句模拟临时表算法:

      执行结果模拟与算法的结果相同:

    比较两种算法结果也相同,似乎是这样的,接下来的实例将不同

    实例2

    使用视图的两种算法merge和temptable分别统计

    表tb_phone , 同类(cid)手机的最高价格(market_price)的产品

    表数据:

    首先可以考虑基本select语句的实现方式(这里就不再赘述):

    先排序再分组

    接下来使用两种算法:

    1. merge合并算法

      最后一句select模拟合并算法有语法错误的,order by 不能在 group by之前,这时执行会报错,但在视图中不会报错,而是直接跳过了错误部分order by 直接执行了

      select * from tb_phone group by cid

      最终结果(错误):

    2. temptable临时表算法

      发现执行结果与普通语句相同,模拟的语句同样正确

      最终结果(正确):

         

       

       

       

       

       

       

       

       

       

       

       

  • 相关阅读:
    poj 1222 EXTENDED LIGHTS OUT (高斯消元 )
    poj 2187 Beauty Contest (凸包: 最远点对,最长直径 , 旋转卡壳法)
    poj 1408 Fishnet (几何:线段相交 + 叉积 求面积 )
    poj 1228 Grandpa's Estate ( 凸包 )
    高斯消元 模版
    poj 1830 开关问题 (高斯消元 )
    poj 1113 Wall (凸包:周长)
    旋转卡壳算法
    poj 1681 Painter's Problem (高斯消元 )
    字符串相关处理
  • 原文地址:https://www.cnblogs.com/EdwinChan/p/7399875.html
Copyright © 2011-2022 走看看