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

摘要:
示例1使用两种视图算法merge和temptable分别统计表tb_手机中的市场_对于价格高于4000的手机,查询视图以查找价格低于6000的手机,并简单总结最终结果:最终执行。以下是使用常规select语句对合并算法的模拟:temptable临时表算法首先执行视图,然后在查询临时表模式下执行其他操作,然后在当前临时表中进行查询。以下是使用常规select语句对临时表算法的模拟:

实例1

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

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

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

表数据:

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

  1. merge合并算法

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

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

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

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

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

  2. temptable临时表算法

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

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

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

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

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

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

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

实例2

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

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

表数据:

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

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

先排序再分组

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

接下来使用两种算法:

  1. merge合并算法

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

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

    select * from tb_phone group by cid

    最终结果(错误):

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

  2. temptable临时表算法

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

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

    最终结果(正确):

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

       

   

   

   

   

   

   

   

   

   

   

   

免责声明:文章转载自《MySQL学习随笔--通过实例理解merge ,temptable算法的差异》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇xshell连接中标麒麟多线程之Nsthread的使用方法下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

如何让plsql查询的数据可编辑

plsql允许查询数据可以编辑的条件是必须查询出rowid 在某个表上点击query data 出现的sql语句是 :select * from licence t 在某个表上点击 edit data 出现的sql语句是:select t.*, t.rowid from licence t 说明要编辑必须带有rowid 比如我们查询这样一条语句 selec...

PostgresQL中的NUlls first/last功能

Nulls first/last功能简介Nulls first/last功能主要用于order by排序子句中,影响空值Null在排序结果中的位置。简单来说,Nulls first表示Null值在排序时一直排在所有值的前面,也就是处理order by a desc时PostgresQL执行器认为Null值大于所有值,而order by a或order by...

iOS开发之使用Runtime给Model类赋值

  本篇博客算是给网络缓存打个基础吧,本篇博客先给出简单也是最容易使用的把字典转成实体类的方法,然后在给出如何使用Runtime来给Model实体类赋值。本篇博客会介绍一部分,主要是字典的key与Model的属性名相同时,使用Runtime来进行赋值,下篇博客会给出字典key的值和Model的名字不同时的解决方案,并给出使用Runtime打印实体类属性值的...

React项目的一些配置以及插件

创建项目 1、安装cra npm install -g create-react-app 2、创建项目   “react-lesson”  为文件名 create-react-app react-lesson 3、启动项目 npm start   使用第三方组件 1、antd: npm install antd --save 使用: import Butt...

mysql开发总结

一、理解MySQL基本概念   1、MySQL软件:MySQL实际上就是一软件,是一工具,是关系型数据库管理系统软件   2、MySQL数据库:就是按照数据结构来组织、存储和管理数据的仓库   3、MySQL数据库实例:     ①MySQL是单进程多线程(而oracle是多进程),也就是说MySQL实例在系统上表现就是一个服务进程,即进程;     ②M...

PG数据库常用命令

查看帮助命令DB=# help --总的帮助DB=# h --SQL commands级的帮助DB=# ? --psql commands级的帮助按列显示,类似MySQL的GDB=# xExpanded display is on.查看DB安装目录(最好root用户执行)find / -name initdb查看有多少DB实例在运行(最好root用户执行)...