码迷,mamicode.com
首页 > 数据库 > 详细

MySQL学习随笔--通过实例理解merge ,temptable算法的差异

时间:2017-08-20 15:54:11      阅读:1824      评论:0      收藏:0      [点我收藏+]

标签:其他   实现   ima   两种   理解   div   group by   算法   phone   

实例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临时表算法

    技术分享

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

    最终结果(正确):

    技术分享

       

   

   

   

   

   

   

   

   

   

   

   

MySQL学习随笔--通过实例理解merge ,temptable算法的差异

标签:其他   实现   ima   两种   理解   div   group by   算法   phone   

原文地址:http://www.cnblogs.com/EdwinChan/p/7399875.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!