MySQL进阶篇(2)—SQL优化、视图/存储过程/触发器

111 篇文章 5 订阅
订阅专栏
14 篇文章 0 订阅
订阅专栏

目录

一、SQL优化

1.1 插入数据

1.2 主键优化

1.3 order by优化

1.4 group by优化

1.5 limit优化

1.6 count优化

1.7 update优化

1.8 总结

二、视图/存储过程/触发器

2.1 视图

2.1.1 视图介绍以及语法

2.1.2 视图的检查选项

2.1.3 视图的更新及作用

2.2 存储过程

2.2.1 存储过程的介绍

2.2.2 基本语法

2.2.3 变量

2.2.4 if判断

2.2.5 参数

2.2.6 case

2.2.7 while

2.2.8 repeat

2.2.9 loop

2.2.10 游标

2.2.11 条件处理程序

2.3 存储函数

2.4 触发器

2.4.1 介绍

2.4.2 语法

2.4.3 案例


一、SQL优化

1.1 插入数据

        

 

1.2 主键优化

  • 数据组织方式

        在InnoDB存储引擎中,表数据都是根据主键顺序组织存放的,这种存储方式的表称为索引组织表(index organized table IOT)

  •  页分裂

        页可以为空,也可以填充一半,也可以填充100%。每个页包含了2-N行数据(如果一行数据多大,会行溢出),根据主键排序

  •  页合并

        当删除一行记录时,实际上记录并没有被物理删除,只是记录被标记(flaged)为删除并且它的空间变得允许被其他记录声明使用。

        当页中删除的记录达到MERGE_THRESHOLD(默认为页的50%),InnoDB会开始寻找最靠近的页(前或后)看看是否可以将两个页合并以优化空间使用

 

  •  主键设计原则

1.3 order by优化

  • Using filesort:通过表的索引或全表扫描,读取满足条件的数据行,然后在排序缓冲区sort buffer中完成排序操作,所有不是通过索引直接返回排序结果的排序都叫FileSort排序
  • Using index:通过有序索引顺序扫描直接返回有序数据,这种情况即为using index,不需要额外排序,操作效率高

 

 

1.4 group by优化

1.5 limit优化

1.6 count优化

1.7 update优化

1.8 总结

二、视图/存储过程/触发器

2.1 视图

2.1.1 视图介绍以及语法

  • 介绍

        视图(View)是一种虚拟存在的表。视图中的数据并不在数据库中实际存在,行和列数据来自定义视图的查询中使用的表,并且是在使用时动态生成的

        通俗的将,视图只保存了查询的SQL逻辑,不保存查询结果。所以我们在创建视图的时候,主要的工作就落在创建这条SQL查询语句上

  • 视图的操作语法

 

2.1.2 视图的检查选项

当使用WITH CHECK OPTION子句创建视图时,MySQL会通过视图检查正自更改的每个行,例如插入、更新、删除,以使其符合视图的定义。MySQL允许基于另一个视图创建视图,它还会检查依赖视图中的规则以保持一致性。为了确定检查的范围,MySQL提供了两个选择:CASCADED和LOCAL,默认值为CASCADED

  • CASCADED

cascaded:翻译过来为 级联 ,指的是数据库参照完整性规则中的一种规则;具体的级联是指:当主表中关键字被修改或删除时,子表中与之关键字相同的记录也随之修改或删除。

         一旦我们在某一个视图创建的时候加了with cascaded check option,那么此时在操作这个视图时会去检查当前视图和当前视图所依赖的所有视图的条件是否满足

        当我们操作当前视图时,cascaded检查选项是,如果当前视图有检查选项,则插入数据要满足包括当前视图条件以及满足当前视图所依赖的视图的条件。如果当前视图没有检查选项,则插入数据要满足当时视图所依赖视图有检查选项及其依赖的视图的条件。

#case1
#创建一个基于students表的视图
create or replace view v1 as select id,name from students where id<=20;
#由于没有检查选项,所以插入id>20的数据也会插入成功
insert into v1 values(21,'john');#插入成功

#case2
#创建一个基于v1的视图,并添加cascaded检查选项
create or replace view v2 as select id,name from v1 where id>10 with cascaded check option;

#添加检查选项后,再插入数据,MySQL就会判断插入数据是否满足条件,
#由于此视图是基于v1的,所以现在可以插入的id值为 10<id<=20。
insert into v2 values(22,'lucy');#插入失败

#case3
#创建一个基于v2的视图
create or replace v3 as select id,name from v2 where id<=15;

#由于v3没有添加检查选项,但v3是基于v2的,所以现在可以插入的id值依然为 10<id<=20。
insert into v3 values(18,'Tom');#插入成功

insert into v3 values(24,'kobe');#插入失败

  • LOCAL

        当我们在操作视图时,local检查选项是递归的去找当前视图所依赖的视图是否有检查选项,如果当前视图以及依赖的视图定义了检查选项,将会去判定我们所操作的数据是否满足这个视图的条件。如果在递归的过程中找到某一个视图在定义的时候没有增加检查选项,此时在操作数据时将不对这个条件做检查。

#case1
#创建一个基于students表的视图
create or replace view v1 as select id,name from students where id<=20;

insert into v1 values(21,'john');#插入成功

#case2
#创建一个基于v1的视图,并添加local检查选项
create or replace view v2 as select id,name from v1 where id>10 with local check option;

#添加检查选项后,再插入数据,MySQL就会判断插入数据是否满足条件,
#由于此视图是基于v1的,v1没有检查选项,所以现在可以插入的id值为 id>10。
insert into v2 values(22,'lucy');#插入成功

#case3
#创建一个基于v2的视图
create or replace v3 as select id,name from v2 where id<=15;

#由于v3没有添加检查选项,但v3是基于v2的,所以现在可以插入的id值依然为 id>10。
insert into v3 values(18,'Tom');#插入成功

2.1.3 视图的更新及作用

视图的更新

        要使视图可更新,视图中的行与基础表中的行之间必须存在一对一的关系。如果视图包含以下任何一项,则该视图不可更新:

  1. 聚合函数或窗口函数(SUM()、MIN()、MAX()、COUNT()等)
  2. DISTINCT
  3. GROUP BY
  4. HAVING
  5. UNION 或 UNION ALL

作用

  • 简单

        视图不仅可以简化用户对数据的理解,也可以简化他们的操作。那些被经常使用的查询可以被定义为视图,从而使得用户不必为以后的操作每次指定全部的条件

  • 安全

        数据库可以授权,但不能授权到数据库特定行和特定的列上。通过视图用户只能查询和修改他们呢所能见到的数据

  • 数据独立

        视图可帮助用户屏蔽真实表结构变化带来的影响

2.2 存储过程

2.2.1 存储过程的介绍

        存储过程是事先经过编译并存储在数据库中的一段SQL语句的集合,调用存储过程可以简化应用开发人员的很多工作,减少数据在数据库和应用服务器之间的传输,对于提高数据处理的效率是有好处的

        存储过程思想上很简单,就是数据库SQL语言层面的代码封装和重用

  •  特点
  1. 封装、复用——>可以把某一业务SQL封装在存储过程中,需要用到的时候直接调用即可
  2. 可以接收参数,也可以返回数据——>在存储过程中,可以传递参数,也可以接收返回值
  3. 减少网络交互,效率提升——>如果涉及到多条SQL,每执行一次都是一次网络传输。而如果封装在存储过程中,只需要网络交互一次可能就可以了

2.2.2 基本语法

  • 创建

  • 调用

  • 查看

  • 删除

注意:在命令行中,执行创建存储过程SQL时,需要通过关键字 delimiter 指定SQL语句的结束符

2.2.3 变量

  • 系统变量

系统变量是MySQL服务器提供,不是用户定义的,属于服务器层面。分为全局变量(GLOBAL)、会话变量(SESSION)

  • 用户自定义变量

用户自定义变量是用户根据需要自己定义的变量,用户变量不用提前声明,在用的时候直接用 “@变量名” 使用就可以。其作用域为当前连接

  • 局部变量

局部变量是根据需要定义的在局部生效的变量,访问之前,需要DECLARE声明。可用作存储过程内的局部变量和输入参数,局部变量的范围是在其内声明的BEGIN...END块

2.2.4 if判断

 

2.2.5 参数

 

2.2.6 case

2.2.7 while

2.2.8 repeat

2.2.9 loop

2.2.10 游标

游标(CURSOR)是用来存储查询结果集的数据类型,在存储工程和函数中可以使用游标对结果集进行循环的处理。游标的使用包括游标的声明、OPEN、FETCH和CLOSE,其语法分别如下

 

2.2.11 条件处理程序

条件处理程序(Handler)可以用来定义在流程控制结构执行过程中遇到问题时相应的处理步骤。具体语法为:

2.3 存储函数

 

2.4 触发器

2.4.1 介绍

        触发器是与表有关的数据库对象,指在 insert / update / delete 之前或之后,触发并执行触发器中定义的SQL语句集合。触发器的这种特性可以协助应用在数据库端确保数据的完整性,日志记录,数据校验等操作。

        使用别名OLD和NEW来引用触发器中发生变化的记录内容,这与其它的数据库是想死的。现在触发器只支持行级触发,不支持语句级触发

2.4.2 语法

2.4.3 案例

 

  • insert类型

  • update类型

  • delete类型

cgb2106-day05
cgblpx的博客
07-30 6341
文章目录一,视图--1,概述--2,测试二,SQL练习--1,测试三,SQL优化的方案--1,总结三,SQL优化的方案 一,视图 –1,概述 可以把SQL的查询结果缓存起来,存入视图中. 好处: 简化了SQL的编写 坏处: 没法做SQL优化,占用空间. –2,测试 #1.创建视图:缓存了查询结果 CREATE VIEW `cgb2106`.`emp_view` AS #以下的SQL执行的结果会被缓存到视图中 (SELECT * FROM emp WHERE ename LIKE '%a%'); #2.
超详细图解!【MySQL进阶篇存储过程,视图,索引,函数,触发器
wj1314250的博客
07-04 1815
超详细图解!【MySQL进阶篇存储过程,视图,索引,函数,触发器1.1 下载Linux 安装包1.2 安装MySQL1.3 启动 MySQL 服务1.4 登录MySQL2\. 索引2.1 索引概述2.2 索引优势劣势2.3 索引结构2.3.1 BTREE 结构2.3.3 B+TREE 结构2.3.3 MySQL中的B+Tree2.4 索引分类2.5 索引语法2.5.1 创建索引2.5.2 查看索引2.5.3 删除索引2.5.4 ALTER命令2.6 索引设计原则3\. 视图3.1 视图概述3.2 创建或者
SQL SERVER 视图优化经历
dengqiu2187的博客
04-25 797
系统中要求对HIS数据进行效益统计,因为HIS数据是需要第三方提供接口导入的,不清楚数据量大小,所以视图以业务为主未对其做性能优化(当时编写试图时就是几条简单的测试数据) 如今在项目接口实施完成后查看视图执行效率,发现执行了很久很久,具体执行时间忘记了,书写不规范,性能两行泪 (HIS系统就提供了近三千万条数据) 发现不仅仅浪费了大量时间,还占用了大量内存空间 我首先就是想到了建...
15天学习MySQL计划-SQL优化 视图进阶篇)-第八天_sql 视图优化
最新发布
2401_85958049的博客
08-20 146
方法一:create [or replace] view 使命名称[(列名)] as select语句 [with [cascaded | local] chack option]格式:create [or replace] view 使命名称[(列名)] as select语句 [with [cascaded | local] chack option]drop view [if exists] 视图名称 [,视图名称]查看视图数据:select * from 视图名称。‘,’:每一个数据直接的分隔符。
SQL视图优化方案、JDBC
qq_60021049的博客
10-18 240
视图 –1,概述 可以把SQL的查询结果缓存起来,存入视图中. 好处: 简化了SQL的编写 坏处: 没法做SQL优化,占用空间. –2,测试 #1.创建视图:缓存了查询结果 CREATE VIEW `cgb2106`.`emp_view` AS #以下的SQL执行的结果会被缓存到视图中 (SELECT * FROM emp WHERE ename LIKE '%a%'); #2.使用视图 #SELECT * FROM emp WHERE ename LIKE '%a%' SELECT * FROM .
SQL扩展(第十八天):SQL视图,SQL优化
qq_56036033的博客
09-01 333
一,视图:就是一个特殊的表,缓存上次的查询结果 好处:提高了SQL的复用率,坏处就是占内存 1,概述 可视化的表,可以把视图当作是一个特殊的表,把sql执行的结果,直接缓存到了视图中,下次还要发起相同的sql,直接查试图 2,创建试图(create view 视图名 as sql语句) USE cgb2017; CREATE VIEW emp_view AS SELECT *FROM teachers WHERE tname LIKE '%王%'; 3,使用视图 SELECT...
SQL Server 优化存储过程的方法
yingyingol
07-18 569
博文出处:SQL Server 优化存储过程的七种方法 博主写的是优化存储过程的七种方法,看了之后,我觉得标题定为“SQL Server优化存储过程的七种规范”比较好,博主讲的大部分是从规范、或者从约定上避免一些额外的、不必要的性能损耗,比较有价值,同样,在转载完博主的文章后,我会在后面总结一些自己在sql性能调优方面的一些经验。 『原文』 优化存储过程有很多种方法,下面介绍最常用的7种。 1...
MySql视图触发器存储过程详解
09-08
MySQL中的视图触发器存储过程数据库管理中常用的功能,它们可以帮助开发者更高效、安全地进行数据操作。下面将分别对这三个概念进行详细解释。 **视图(View)** 视图是一种虚拟表,它是由SQL查询结果形成的...
基于mysql事务、视图存储过程触发器的应用分析
12-15
MySQL数据库在进行复杂数据操作时,常常会用到事务、视图存储过程触发器。这些特性使得数据库管理更加高效且安全。下面将详细解释这些概念及其应用。 首先,我们来看MySQL中的事务(Transaction)。事务是...
浅谈MySql 视图触发器以及存储过程
12-14
MySQL中的视图触发器存储过程数据库管理系统中非常重要的功能,它们分别在数据抽象、数据操作自动化和批量处理方面发挥着关键作用。 **视图(View)** 视图是一种虚拟表,它并不实际存储数据,而是由一个...
MYSQL数据库优化(视图)
ZHP131415的博客
04-11 426
MYSQL数据库优化 视图的创建: 在此使用docker容器里面下载的mysql:5.5镜像版本, 启动docker容器 :systemctl start docker , 启动mysql: docker start c_mysql (c_mysql为创建mysql容器时起的别名) 进入mysql容器:docker exec -it c-mysql /bin/bash 输入m密码:mysql ...
MySQL进阶-SQL优化视图
qq_44989062的博客
12-15 178
MySQL进阶-SQL语句、视图
春华秋实之MySQL进阶-04 视图/存储过程/触发器
m0_46507516的博客
08-28 363
存储过程,系统变量,SQL编程
MySQL进阶- SQL优化视图
qq_72343101的博客
05-30 1468
limit一个常见的问题就是,在大数据量的情况下,越往后查询数据,limit的效率月底,例如limit 2000000,10,此时需要mysql排序前2000010记录,但是仅仅返回2000000和2000010之间的记录,其他的记录丢弃,查询排序的代价非常大。页可以为空,也可以填充一半,也可以全部填满,但是一个页中最少包含2行数据,如果某行的数据较大,超出了页的阈值之后,就会出现行溢出的现象,如果顺序插入,就不会出现页分裂,乱序插入就会出现页分裂的现象,导致插入时要多操作页,自然插入的时间就会变长。
mysql触发器优化_MySQL管理与优化(10):触发器
weixin_34026053的博客
01-21 164
触发器触发器是与表相关的数据库对象,在满足定义条件时触发,并执行触发器中定义的语句集合。创建触发器:创建触发器语法:CREATE[DEFINER = { user | CURRENT_USER }]TRIGGER trigger_nametrigger_time trigger_eventON tbl_name FOR EACH ROW[trigger_order]trigger_bodytrig...
mysql触发器优化_数据库后台优化触发器
weixin_29720641的博客
01-28 156
为了保证数据库的完整性和一致性,很多的时候需要执行多条sql语句才能达到想要的目的。 在一对多的数据库关系中,比如卡号类别与卡号之间的关系。如果要取消某个类别的时候,就要连同齐下的所有卡号都删除。在现实中,注册的时候一般都会进行充值,当我想car为了保证数据库的完整性和一致性,很多的时候需要执行多条sql语句才能达到想要的目的。在一对多的数据库关系中,比如卡号类别与卡号之间的关系。如果要取消某个类...
mysql触发器优化_mysql批量更新优化触发器 | 学步园
weixin_30415591的博客
01-21 194
mysql批量更新优化触发器需要以A表的更新来同步刷新B表的数据.B表是1个大表.记录行数比是A表的10倍.已有的同步更新方式,update product.order_list a left join product.user b on a.email=b.email set a.lastlogin=b.lastlogin;改进以后的同步更新方式:每当A表有更新时,即利用触发器同步更新B表的记...
数据库---SQL优化/视图/存储过程/触发器
m0_58342797的博客
04-27 1410
SQL优化 插入数据 1、批量插入 insert student_info values(1,'李四',1789090,'189@136.com','陕西咸阳'),(1,'李四',1789090,'189@136.com','陕西咸阳'); 每一次insert都要和数据库建立连接,可以批量插入,减少连接次数 2、手动事务提交 mysql默认自动提交,每一条insert语句的执行,都会涉及到事务的开启和关闭,可以设置手动提交,减少事务开启关闭次数 3、主键性能插入 按照主键顺序插入 4、涉
MySQL进阶之SQL优化视图存储过程
m0_63932570的博客
10-22 819
使用select @@local_infile可以看出这个local_infile开关是否打开,0是关闭,1是打开。当没有建立与这两个索引相匹配的索引时,查询的结果就是using filesort。这样再插入数据时,就可以把符合where条件的数据插入到基表和视图中啦,注意不符合where条件的数据不会插入到基表和视图。但当我们在基表中查询数据时,这些从视图插入的数据并不存在。这里26插不进去是因为不仅要检查插入的视图,还要再去检查该视图依赖的视图的where条件表达式。global表示全局的系统变量。
MySQL触发器存储过程、自定义函数和视图的示例应用
MySQL 触发器存储过程、自定义函数和视图示例 MySQL 触发器是指在特定的事件发生时自动执行的操作,例如在插入、更新或删除数据时。触发器可以用于维护数据的一致性、实现业务逻辑和执行复杂的操作。 触发器的...
写文章

热门文章

  • JavaWeb—JavaScript 9091
  • Java—面向对象——成员方法 7955
  • Java—事件处理机制 6722
  • Java—异常(Exception) 5073
  • JavaWeb—Request请求对象 3881

分类专栏

  • 笔记 111篇
  • 框架 22篇
  • MySQL 14篇
  • JavaWeb 13篇
  • 项目 10篇
  • Linux 3篇
  • 快捷键 2篇
  • JDBC 2篇

最新评论

  • Java—面向对象——成员方法

    Soun_Mory: 看这个内存分析就有一种老韩的亲切感

  • 瑞吉外卖(6)—手机验证码登录

    洒水水: 请问部署之后,用了黑马的资料部署的静态页面,怎么访问手机端

  • 瑞吉外卖(5)—套餐管理业务开发

    DaTuuu: 哥,我加完套餐分页查询,就报端口500错误怎么办

  • MySQL进阶篇(1)—存储引擎、索引

    恍恍惚惚呼呼: 哈哈,看来也是黑马人啊

  • MySQL进阶篇(1)—存储引擎、索引

    己不由心王道长: 大佬优质好文,支持一波,也欢迎大佬到我舍下指点一二

最新文章

  • MySQL运维篇(3)—读写分离
  • MySQL运维篇(2)—分库分表
  • MySQL运维篇(1)—日志、主从复制
2022年119篇

目录

目录

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值

深圳坪山网站建设公司合肥木易优化网站优化网站的工具武汉优化网站亳州企业网站排名优化哪家服务好网站品牌优化福州网站系统优化新乡网站优化公司石景山网站快速优化网站使用图像优化其分辨率刷搜狗网站优化排名铁岭网站SEO优化费用薛城网站优化网站标题优化软件崇州专业网站优化优化网站访问速度福建省模板网站优化汨罗优化网站运营车公庄网站关键词如何优化西安网站优化外包南通网站关键词优化企业天津专业网站优化价格表丹东优化网站排名网站优化中发布的文章的效果江门服务好的网站优化方式湛江网站内容优化汕头网站优化推广多少钱网站只做优化可以吗网站搭建优化价格遂宁网站优化南昌网站优化香港通过《维护国家安全条例》两大学生合买彩票中奖一人不认账让美丽中国“从细节出发”19岁小伙救下5人后溺亡 多方发声卫健委通报少年有偿捐血浆16次猝死汪小菲曝离婚始末何赛飞追着代拍打雅江山火三名扑火人员牺牲系谣言男子被猫抓伤后确诊“猫抓病”周杰伦一审败诉网易中国拥有亿元资产的家庭达13.3万户315晚会后胖东来又人满为患了高校汽车撞人致3死16伤 司机系学生张家界的山上“长”满了韩国人?张立群任西安交通大学校长手机成瘾是影响睡眠质量重要因素网友洛杉矶偶遇贾玲“重生之我在北大当嫡校长”单亲妈妈陷入热恋 14岁儿子报警倪萍分享减重40斤方法杨倩无缘巴黎奥运考生莫言也上北大硕士复试名单了许家印被限制高消费奥巴马现身唐宁街 黑色着装引猜测专访95后高颜值猪保姆男孩8年未见母亲被告知被遗忘七年后宇文玥被薅头发捞上岸郑州一火锅店爆改成麻辣烫店西双版纳热带植物园回应蜉蝣大爆发沉迷短剧的人就像掉进了杀猪盘当地回应沈阳致3死车祸车主疑毒驾开除党籍5年后 原水城县长再被查凯特王妃现身!外出购物视频曝光初中生遭15人围殴自卫刺伤3人判无罪事业单位女子向同事水杯投不明物质男子被流浪猫绊倒 投喂者赔24万外国人感慨凌晨的中国很安全路边卖淀粉肠阿姨主动出示声明书胖东来员工每周单休无小长假王树国卸任西安交大校长 师生送别小米汽车超级工厂正式揭幕黑马情侣提车了妈妈回应孩子在校撞护栏坠楼校方回应护栏损坏小学生课间坠楼房客欠租失踪 房东直发愁专家建议不必谈骨泥色变老人退休金被冒领16年 金额超20万西藏招商引资投资者子女可当地高考特朗普无法缴纳4.54亿美元罚金浙江一高校内汽车冲撞行人 多人受伤

深圳坪山网站建设公司 XML地图 TXT地图 虚拟主机 SEO 网站制作 网站优化