当前位置:首页 » 存储配置 » 存储过程执行计划

存储过程执行计划

发布时间: 2023-01-09 03:41:38

‘壹’ sql存储过程是怎么执行的(是执行过程)谢了

就像你调用方法一样嘛
通过调用
exec 存储过程名 参数名1,参数名2,.....
进入存储过程,根据存储过程编写语句顺序执行

‘贰’ 如何查看mysql存储过程中sql的执行计划

查看存储过程创建语句可运行下列sql语句:语法showcreate{procere|function}sp_name;例如查看存储过程mypro的创建语句showcreateproceremypro;查看自定义函数myfunc的创建语句showcreatefunctionmyfunc;

‘叁’ 如何查看执行存储过程的执行计划

存储过程没有执行计划 只有SQL 有执行计划。
你可以把存储过程里面的SQL 逐个分析

‘肆’ oracle存储过程是从上到下执行吗

是。oracle存储过程是原则从上至下;从右向左由上至下,在执行计划中一般含有多个节点,所以是。存储过程(StoredProcere)是在大型数据库系统中,一组为了完成特定功能的SQL语句集,它存储在数据库中,一次编译后永久有效,用户通过指定存储过程的名字并给出参数(如果该存储过程带有参数)来执行它。

‘伍’ mysql 存储过程执行太慢怎么优化

1.当我们请求mysql服务器的时候,MySQL前端会有一个监听,请求到了之后,服务器得到相关的SQL语句,执行之前(虚线部分为执行),还会做权限的判断
2.通过权限之后,SQL就到MySQL内部,他会在查询缓存中,看该SQL有没有执行过,如果有查询过,则把缓存结果返回,说明在MySQL内部,也有一个查询缓存.但是这个查询缓存,默认是不开启的,这个查询缓存,和我们的Hibernate,Mybatis的查询缓存是一样的,因为查询缓存要求SQL和参数都要一样,所以这个命中率是非常低的(没什么卵用的意思)。
3.如果我们没有开启查询缓存,或者缓存中没有找到对应的结果,那么就到了解析器,解析器主要对SQL语法进行解析
4.解析结束后就变成一颗解析树,这个解析树其实在Hibernate里面也是有的,大家回忆一下,在以前做过Hibernate项目的时候,是不是有个一个antlr.jar。这个就是专门做语法解析的工具.因为在Hibernate里面有HQL,它就是通过这个工具转换成SQL的,我们编程语言之所以有很多规范、语法,其实就是为了便于这个解析器解析,这个学过编译原理的应该知道.
5.得到解析树之后,不能马上执行,这还需要对这棵树进行预处理,也就是说,这棵树,我没有经过任何优化的树,预处理器会这这棵树进行一些预处理,比如常量放在什么地方,如果有计算的东西,把计算的结果算出来等等...
6.预处理完毕之后,此时得到一棵比较规范的树,这棵树就是要拿去马上做执行的树,比起之前的那棵树,这棵得到了一些优化
7.查询优化器,是MySQL里面最关键的东西,我们写任何一条SQL,比如SELECT * FROM USER WHERE USERNAME = toby AND PASSWORD = 1,它会怎么去执行?它是先执行username = toby还是password = 1?每一条SQL的执行顺序查询优化器就是根据MySQL对数据统计表的一些信息,比如索引,比如表一共有多少数据,MySQL都是有缓存起来的,在真正执行SQL之前,他会根据自己的这些数据,进行一个综合的判定,判断这一次在多种执行方式里面,到底选哪一种执行方式,可能运行的最快.这一步是MySQL性能中,最关键的核心点,也是我们的优化原则.我们平时所讲的优化SQL,其实说白了,就是想让查询优化器,按照我们的想法,帮我们选择最优的执行方案,因为我们比MySQL更懂我们的数据.MySQL看数据,仅仅只是自己收集到的信息,这些信息可能是不准确的,MySQL根据这些信息选了一个它自认为最优的方案,但是这个方案可能和我们想象的不一样.
8.这里的查询执行计划,也就是MySQL查询中的执行计划,比如要先执行username = toby还是password = 1
9.这个执行计划会传给查询执行引擎,执行引擎选择存储引擎来执行这一份传过来的计划,到磁盘中的文件中去查询,这个时候重点来了,影响这个查询性能最根本的原因是什么?就是硬盘的机械运动,也就是我们平时熟悉的IO,所以一条查询语句是快还是慢,就是根据这个时间的IO来确定的.那怎么执行IO又是什么来确定的?就是传过来的这一份执行计划.(优化就是制定一个我们认为最快的执行方案,最节省IO,和执行最快)
10.如果开了查询缓存,则返回结果给客户端,并且查询缓存也放一份。

‘陆’ 存储过程的优缺点

存储过程的优缺点:
存储过程优点:
1.由于应用程序随着时间推移会不断更改,增删功能,T-SQL过程代码会变得更复杂,StoredProcere为封装此代码提供了一个替换位置。
2.执行计划(存储过程在首次运行时将被编译,这将产生一个执行计划--
实际上是
Microsoft
SQL
Server为在存储过程中获取由
T-SQL
指定的结果而必须采取的步骤的记录。)缓存改善性能。
但sql
server新版本,执行计划已针对所有
T-SQL 批处理进行了缓存,而不管它们是否在存储过程中,所以没比较优势了。
3.存储过程可以用于降低网络流量,存储过程代码直接存储于数据库中,所以不会产生大量T-sql语句的代码流量。
4.使用存储过程使您能够增强对执行计划的重复使用,由此可以通过使用远程过程调用
(RPC)
处理服务器上的存储过程而提高性能。RPC
封装参数和调用服务器端过程的方式使引擎能够轻松地找到匹配的执行计划,并只需插入更新的参数值。
5.可维护性高,更新存储过程通常比更改、测试以及重新部署程序集需要较少的时间和精力。
6.代码精简一致,一个存储过程可以用于应用程序代码的不同位置。
7.更好的版本控制,通过使用
Microsoft
Visual
SourceSafe
或某个其他源代码控制工具,您可以轻松地恢复到或引用旧版本的存储过程。
8.增强安全性:
a、通过向用户授予对存储过程(而不是基于表)的访问权限,它们可以提供对特定数据的访问;
b、提高代码安全,防止
SQL注入(但未彻底解决,例如,将数据操作语言--DML,附加到输入参数);
c、SqlParameter
类指定存储过程参数的数据类型,作为深层次防御性策略的一部分,可以验证用户提供的值类型(但也不是万无一失,还是应该传递至数据库前得到附加验证)。
存储过程缺点:
1.如果更改范围大到需要对输入存储过程的参数进行更改,或者要更改由其返回的数据,则您仍需要更新程序集中的代码以添加参数、更新
GetValue()
调用,等等,这时候估计比较繁琐了。
2.可移植性差
由于存储过程将应用程序绑定到
SQL
Server,因此使用存储过程封装业务逻辑将限制应用程序的可移植性。如果应用程序的可移植性在您的环境中非常重要,则将业务逻辑封装在不特定于
RDBMS
的中间层中可能是一个更佳的选择。
3.
大量采用存储过程进行业务逻辑的开发致命的缺点是很多存储过程不支持面向对象的设计,无法采用面向对象的方式将业务逻辑进行封装,从而无法形成通用的可支持复用的业务逻辑框架。
4.代码可读性差,相当难维护.

‘柒’ 存储过程第一次执行耗时30分钟,第二次开始每次耗时不到3分钟,这是什么原因

sql是高级语言,数据库系统执行sql之前要将sql语句进行解析(相当于编译),这个过程叫硬解析;数据库系统每次执行sql之前都会检查共享池中是不是存在已经解析过的语句,如果有就拿来直接用,这叫软结息。软解析比硬解析效率高,这是影响因素之一;
二、第一次执行可能没有走索引,第二次执行使用第一次执行的执行计划
三、看你的存储过程做了些什么,有可能第一次把活干完了,导致第二次执行没什么活干
以上回答基于oracle体系结构

‘捌’ 存储过程的作用是什么

你会写程序吗?存储过程就是程序,就是语句的集合。有些数据的批量连贯的处理,不好用程序写,用过程写会很方便,而且执行效率也高。如果你这些处理的数据是有规律的,或者需要反复处理的,那你就定义过程,然后根据你传入的参数进行处理。跟程序中的过程没什么两样。而且还有如下
1.存储过程可以使得程序执行效率更高、安全性更好,因为过程建立之后
已经编译并且储存到数据库,直接写sql就需要先分析再执行因此过程效率更高,直接写sql语句会带来安全性问题,如:sql注入
2.建立过程不会很耗系统资源,因为过程只是在调用才执行。
3.存储过程可以用于降低网络流量,存储过程代码直接存储于数据库中,所以不会产生大量t-sql语句的代码流量。
4.使用存储过程使您能够增强对执行计划的重复使用,由此可以通过使用远程过程调用
(rpc)
处理服务器上的存储过程而提高性能。rpc
封装参数和调用服务器端过程的方式使引擎能够轻松地找到匹配的执行计划,并只需插入更新的参数值。
5.可维护性高,更新存储过程通常比更改、测试以及重新部署程序集需要较少的时间和精力。
6.代码精简一致,一个存储过程可以用于应用程序代码的不同位置。
7.增强安全性:
a、通过向用户授予对存储过程(而不是基于表)的访问权限,它们可以提供对特定数据的访问;
b、提高代码安全,防止
sql注入(但未彻底解决,例如,将数据操作语言--dml,附加到输入参数);
c、sqlparameter
类指定存储过程参数的数据类型,作为深层次防御性策略的一部分,可以验证用户提供的值类型(但也不是万无一失,还是应该传递至数据库前得到附加验证)。
缺点就是:
1、大量的利用过程,会对服务器压力比较大。

‘玖’ 存储过程是不是对内存消耗很大呢

存储过程的优缺点
优点:
1.由于应用程序随着时间推移会不断更改,增删功能,T-SQL过程代码会变得更复杂,StoredProcere为封装此代码提供了一个替换位置。

2.执行计划(存储过程在首次运行时将被编译,这将产生一个执行计划-- 实际上是 Microsoft SQL Server为在存储过程中获取由 T-SQL 指定的结果而必须采取的步骤的记录。)缓存改善性能。
........但sql server新版本,执行计划已针对所有 T-SQL 批处理进行了缓存,而不管它们是否在存储过程中,所以没比较优势了。

3.存储过程可以用于降低网络流量,存储过程代码直接存储于数据库中,所以不会产生大量T-sql语句的代码流量。

4.使用存储过程使您能够增强对执行计划的重复使用,由此可以通过使用远程过程调用 (RPC) 处理服务器上的存储过程而提高性能。RPC 封装参数和调用服务器端过程的方式使引擎能够轻松地找到匹配的执行计划,并只需插入更新的参数值。

5.可维护性高,更新存储过程通常比更改、测试以及重新部署程序集需要较少的时间和精力。

6.代码精简一致,一个存储过程可以用于应用程序代码的不同位置。

7.更好的版本控制,通过使用 Microsoft Visual SourceSafe 或某个其他源代码控制工具,您可以轻松地恢复到或引用旧版本的存储过程。

8.增强安全性:
a、通过向用户授予对存储过程(而不是基于表)的访问权限,它们可以提供对特定数据的访问;
b、提高代码安全,防止 SQL注入(但未彻底解决,例如,将数据操作语言--DML,附加到输入参数);
c、SqlParameter 类指定存储过程参数的数据类型,作为深层次防御性策略的一部分,可以验证用户提供的值类型(但也不是万无一失,还是应该传递至数据库前得到附加验证)。

缺点:

1.如果更改范围大到需要对输入存储过程的参数进行更改,或者要更改由其返回的数据,则您仍需要更新程序集中的代码以添加参数、更新 GetValue() 调用,等等,这时候估计比较繁琐了。

2.可移植性差

由于存储过程将应用程序绑定到 SQL Server,因此使用存储过程封装业务逻辑将限制应用程序的可移植性。如果应用程序的可移植性在您的环境中非常重要,则将业务逻辑封装在不特定于 RDBMS 的中间层中可能是一个更佳的选择。

没有内存消耗问题

热点内容
团支书智慧团建密码是多少 发布:2025-07-26 16:10:32 浏览:884
如何清除苹果6s缓存 发布:2025-07-26 16:08:25 浏览:822
手机配置高玩不了单机游戏怎么办 发布:2025-07-26 15:53:05 浏览:258
手机设置开机手势密码后如何解锁 发布:2025-07-26 15:39:14 浏览:39
迭代优化算法 发布:2025-07-26 15:25:45 浏览:949
东风本田买哪个配置好 发布:2025-07-26 15:10:01 浏览:765
plsql游标 发布:2025-07-26 15:09:51 浏览:128
android转字符串数组 发布:2025-07-26 15:08:05 浏览:269
实时产量编程 发布:2025-07-26 15:03:33 浏览:114
c语言汉诺塔算法 发布:2025-07-26 14:56:13 浏览:937