当前位置:首页 » 编程语言 » sql第一次执行很快第二次很慢
扩展阅读
webinf下怎么引入js 2023-08-31 21:54:13
堡垒机怎么打开web 2023-08-31 21:54:11

sql第一次执行很快第二次很慢

发布时间: 2022-05-14 00:46:17

‘壹’ oracle查询同一条语句,第一次查询很快,第二次查询就几乎卡死

这个时间条件的修改不会改变结果集,虽然不会改变结果集,但会改变缓存里的数据。
第二次查询在PLsql里面或者在程序里面查询都会卡住,而且这种情况还是偶发的,有时候不修改任何条件连续查询就一直很快。看看是不是有并发什么的。这种情况确实比较难判断。

‘贰’ 同一个SQL,在8个小时内为什么会有不同的执行计划有的快,有的慢

一般不是执行计划不同,除非你有比如建立索引的等操作。
这个慢和快在这里,不是执行计划决定,而是你的服务器的情况不同,可能执行时cpu同时处理的所以慢内容很多,所以慢,也可能是内存导致的,也可能是io导致的,也就是说可能性很多,如果要分析那真的要一定时间。
当然,执行计划也不一定完全一致,比如你会发现第二次查询一般比第一次快,这是因为上次查询的内容保存在内存中,只要还没有被替换掉,那么下次查询就会快。这种在执行计划上是看不出来的,但是确实也存在不同。

‘叁’ 一条复杂的SQL语句,为什么第一次查询很慢,而第二次查询却明显快了

sql语句如果联合了多张表或频繁使用多个函数进行查询,确实会影响效率。需要优化的话,建议给查询条件设置索引,索引能提高查询速度;但是如果你的sql语句需要复合查询而且有很多运算的话,建议还是把一条sql语句拆开成三四条来写,虽然拆分来写有点麻烦但是查询响应速度明显快好几倍,不信你试试!

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

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

‘伍’ 有个SQL,在pl/sql上执行第一次要40来秒,后面执行就只要1秒不到,怎么样才能让第一次执行就很快呢

先告诉下你oracle中sql处理机制吧
像你说的这个情况,就是oracle中的预编译sql过程,它会将你运行过的sql当做一个模板存在内存里,当你下次运行结构与这个sql一样的语句时,然后就直接使用之前的那个sql的缓存,然后换一下where条件的参数值,跳过了后面的很多处理过程,所以你会发现后面再运行类似的sql,处理效率会高很多。

根据我上面的推断,想让sql第一次执行快,只能是让查出来的结果集尽可能的少,但又不能改变它的sql结构,否则就错了。。

‘陆’ 应用第一次调用sql server 数据库后,再次调用时明显速度快了是什么原因

sql server会把查询过得放到类似缓存的东西中,下次查询不需要在进行编译等操作,所以速度会明显快了。
就如存储过程,第一次执行很慢,第二次就很快了。

‘柒’ 同样一个存储过程,为什么第一次快,第二次就很慢

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

‘捌’ 一个SQL有时执行速度很快有时很慢,请问处理思路

原因有很多的。

  1. 主键约束。

    当数据量达到百万以上的时候,你用主键去搜索某一条数据时速度是极快的。但当你不用主键去搜索的时候速度就降了几十倍甚至上百倍,这个是主键的好处。

  2. 索引。

    当你的表字段设置有索引的时候,搜索速度比不创建索引要快几倍至几十倍。

  3. sql语句不够优化。

    在查询某数据的时候,能不用*就尽量不用,想要哪个字段就查哪个,多余的不要,这样就能达到数据传输精简化,让查询速度也能快上许多。

  4. 多表联合查询。

    在大数据量的时候这个多表查询尽量不用,毕竟是很耗内存的,宁愿用其他语言循环执行简单的 select 字段 from 表名 where 条件 这样的简单sql语句,这样也能加快速度。

其他方面还有很多的,比如服务器的原因呀,数据库表结构类型呀。。。我就不多说了。

‘玖’ SQL缓存问题,第一次查慢,第二次查快

查询时,数据库引擎会判断,如果数据在内存中,则会从内存读取数据,如果数据不在内存在,则先从硬盘读到内存,然后再供查询。
所以第一次查的时候,根据你的语句,数据库引擎会把一些数据从硬盘读到内存,第二次再查的时候,就从内存读数据,就快了很多了。

oracle有一个功能是让表常驻内存。

‘拾’ oracle 查询语句 第一次执行很快,第二次执行就很慢 。是什么原因

oracle sql 第一次查询快, 以后查询慢
大多数情况下,用oracle, 第一次查询慢, 第二次查询肯定比第二次查询快对吧,
但对于这种情况,第一次查询快, 以后查询慢。
Cardinality Feedback基数反馈, 是版本11.2中引入的关于SQL 性能优化的新特性,该特性主要针对 统计信息陈旧、无直方图或虽然有直方图但仍基数计算不准确的情况, Cardinality基数的计算直接影响到后续的JOIN COST等重要的成本计算评估,造成CBO选择不当的执行计划。以上是Cardinality Feedback特性引入的初衷。
基数反馈多少也造成了一些麻烦,典型的情况是测试语句性能时,第一次的性能最好,之后再运行其性能变差。
如何禁用Cardinality Feedback基数反馈
对于这些”惹火”特性,为了stable,往往考虑关闭该特性。
可以通过多种方法禁用该特性
1. 使用 _optimizer_use_feedback 隐藏参数
session 级别
SQL> alter session set “_optimizer_use_feedback”=false;
会话已更改。
system级别
SQL> alter system set “_optimizer_use_feedback”=false;
系统已更改。
————————————————
原文链接:https://blog.csdn.net/demonson/article/details/80522150