sql 写在 oracle的function里执行速度会快么?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了sql 写在 oracle的function里执行速度会快么?相关的知识,希望对你有一定的参考价值。

我有一个很大的sql直接在plsql里运行效率低,放在function里会快么?
能帮忙分析下原理么? 绑定变量是什么意思

参考技术A 快不了

因为 存储过程中的SQL 不能被共享,每次都会硬解析
参考技术B 不存在这样的说法

想要运行快还是要对你写的语句进行优化
参考技术C 这个最主要的还是得看你的sql能不能优化一下了。解析也是一部分,也可以尝试一下绑定变量的方式。本回答被提问者采纳 参考技术D 重复调用的话会快些~~

如何查看oracle服务器上正在执行的SQL语句

参考技术A 首先,你要以dba身份登陆数据库。第二,为某个用户开启sql跟踪。那个用户就是你要跟踪的、正在执行sql语句的那个用户。命令如下:execute dbms_system.set_sql_trace_in_session(sid,serial#,true)其中参数的意义是,sid-会话id,serial#-序列号,这两个参数可以从v$session中得到。第三,上面的命令执行成功之后数据库就自动对该用户所发出的所有sql语句进行跟踪,并把结果写在用户跟踪文件里。用户跟踪文件存放在数据库服务器上,路径请参考init.ora文件中的udump参数值。文件名为ora_sid_xxxx.trc(for unix)或者oraxxxxx.trc(for NT),其中xxxx文件系统进程编号,这个编号可以从v$process和v$session两个表通过关联的方式查询得到。本回答被提问者采纳 参考技术B

    查询Oracle正在执行的sql语句及执行该语句的用户

  SELECT b.sid oracleID,
       b.username 登录Oracle用户名,
       b.serial#,
       spid 操作系统ID,
       paddr,
       sql_text 正在执行的SQL,
       b.machine 计算机名
FROM v$process a, v$session b, v$sqlarea c
WHERE a.addr = b.paddr
   AND b.sql_hash_value = c.hash_value

    查看正在执行sql的发起者的发放程序

  SELECT OSUSER 电脑登录身份,
       PROGRAM 发起请求的程序,
       USERNAME 登录系统的用户名,
       SCHEMANAME,
       B.Cpu_Time 花费cpu的时间,
       STATUS,
       B.SQL_TEXT 执行的sql
FROM V$SESSION A
LEFT JOIN V$SQL B ON A.SQL_ADDRESS = B.ADDRESS
                   AND A.SQL_HASH_VALUE = B.HASH_VALUE
ORDER BY b.cpu_time DESC

    查出oracle当前的被锁对象

  SELECT l.session_id sid,
       s.serial#,
       l.locked_mode 锁模式,
       l.oracle_username 登录用户,
       l.os_user_name 登录机器用户名,
       s.machine 机器名,
       s.terminal 终端用户名,
       o.object_name 被锁对象名,
       s.logon_time 登录数据库时间
FROM v$locked_object l, all_objects o, v$session s
WHERE l.object_id = o.object_id
   AND l.session_id = s.sid
ORDER BY sid, s.serial#;


    kill掉当前的锁对象可以为

  alter system kill session 'sid, s.serial#‘;

参考技术C ---正在执行的
select a.username, a.sid,b.SQL_TEXT, b.SQL_FULLTEXT
from v$session a, v$sqlarea b
where a.sql_address = b.address

---执行过的
select b.SQL_TEXT,b.FIRST_LOAD_TIME,b.SQL_FULLTEXT
from v$sqlarea b
where b.FIRST_LOAD_TIME between '2015-11-13/09:24:47' and
'2015-11-13/09:24:47' order by b.FIRST_LOAD_TIME

以上是关于sql 写在 oracle的function里执行速度会快么?的主要内容,如果未能解决你的问题,请参考以下文章

如何查看oracle服务器上正在执行的SQL语句

function 在脚本里面的功能

oracle里面有没有类似与sql server里面的go?

Instr函数在oracle存储过程里怎么用

Oracle中存储过程的使用

为啥js代码写在HTML文件里可以运行,写在js文件里被html文件调用之后却报错?