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

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

    最终结果(正确):

时间: 2024-10-03 13:27:05

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

MySQL学习随笔--视图

视图概念 数据库中的视图指的是一个虚拟表,其内容由查询定义.同真实的表一样,视图也是由行与列构成的.视图的数据来源由SQL语句查询得到,不存储数据 视图创建方法 格式 : create view 视图名称 as SQL查询 说明: create view //创建视图 视图名称 //也就是虚拟表的名称è表名 as 后面跟查询语句,不可省略 查看视图创建语句 格式: show create view 视图名称 show create view 视图名称 \G 注意: \G表示列名垂直显示 不加\G

MySQL学习笔记(基础部分)-单实例mysql-5.5.X安装

MySQL学习笔记(平台CentOS 6) 1.建立mysql账号 [[email protected] tools]# groupadd mysql [[email protected] tools]# useradd -s /sbin/nologin -g mysql -M mysql 2.配置安装环境 [[email protected] ~]# yum groupinstall 'Development Tools' -y [[email protected] ~]# yum insta

MySQL学习总结(摘抄)

1.数据库概述 简 而言之,数据库(DataBase)就是一个存储数据的仓库.为了方便数据的存储和管理,将数据按照特定的规律存储在磁盘上.通过数据库管理系统,可以有 效的组织和管理存储在数据库中的数据.如今,已经存在的Oracle.SQLServer.MySQL等诸多优秀的数据库. 详解内容: 数据存储方式 数据库在开发中的作用 数据库访问技术 MySQL数据库的介绍 数据库泛型 SQL语言 常见数据库系统 如果学习数据库 1.1 数据库理论基础 数据库能够将数据按照特定的规律组织起来.那么,数

我的MYSQL学习心得(十一)

原文:我的MYSQL学习心得(十一) 我的MYSQL学习心得(十一) 我的MYSQL学习心得(一) 我的MYSQL学习心得(二) 我的MYSQL学习心得(三) 我的MYSQL学习心得(四) 我的MYSQL学习心得(五) 我的MYSQL学习心得(六) 我的MYSQL学习心得(七) 我的MYSQL学习心得(八) 我的MYSQL学习心得(九) 我的MYSQL学习心得(十) 我的MYSQL学习心得(十二) 这一篇<我的MYSQL学习心得(十一)>将会讲解MYSQL的视图 使用视图的理由是什么? 1.安

我的MYSQL学习心得(十一) 视图

这一篇<我的MYSQL学习心得(十一)>将会讲解MYSQL的视图 使用视图的理由是什么? 1.安全性:一般是这样做的:创建一个视图,定义好该视图所操作的数据. 之后将用户权限与视图绑定,这样的方式是使用到了一个特性:grant语句可以针对视图进行授予权限. 2.查询性能提高 3.有灵活性的功能需求后,需要改动表的结构而导致工作量比较大,那么可以使用虚拟表的形式达到少修改的效果. 这是在实际开发中比较有用的 4.复杂的查询需求,可以进行问题分解,然后将创建多个视图获取数据.将视图联合起来就能得到

MySql学习笔记(转载)

/* 启动MySQL */net start mysql /* 连接与断开服务器 */mysql -h 地址 -P 端口 -u 用户名 -p 密码 /* 跳过权限验证登录MySQL */mysqld --skip-grant-tables-- 修改root密码密码加密函数password()update mysql.user set password=password('root'); SHOW PROCESSLIST -- 显示哪些线程正在运行SHOW VARIABLES -- /* 数据库操

一千行MySQL学习笔记

/* 启动MySQL */ net start mysql /* 连接与断开服务器 */ mysql -h 地址 -P 端口 -u 用户名 -p 密码 /* 跳过权限验证登录MySQL */ mysqld --skip-grant-tables -- 修改root密码 密码加密函数password() update mysql.user set password=password('root'); SHOW PROCESSLIST -- 显示哪些线程正在运行 SHOW VARIABLES --

一千行MySQL学习笔记(六)

/* 备份与还原 */ ------------- 备份,将数据的结构与表内数据保存起来. 利用 mysqldump 指令完成. -- 导出 1. 导出一张表 mysqldump -u用户名 -p密码 库名 表名 > 文件名(D:/a.sql)2. 导出多张表 mysqldump -u用户名 -p密码 库名 表1 表2 表3 > 文件名(D:/a.sql)3. 导出所有表 mysqldump -u用户名 -p密码 库名 > 文件名(D:/a.sql)4. 导出一个库 mysqldump

一千行MySQL学习笔记【博客园】

/* 启动MySQL */ net start mysql /* 连接与断开服务器 */ mysql -h 地址 -P 端口 -u 用户名 -p 密码 /* 跳过权限验证登录MySQL */ mysqld --skip-grant-tables -- 修改root密码 密码加密函数password() update mysql.user set password=password('root'); SHOW PROCESSLIST -- 显示哪些线程正在运行 SHOW VARIABLES --