如何查看Oracle中sql语句的执行时间
通过Oracle执行计划可以看到SQL的执行时间。
EXPLAIN PLAN FOR
SELECT * FROM table;
SELECT * FROM TABLE(DBMS_XPLAN.DISPLAY);
SQL>set timing on --显示执行时间
SQL>set autorace on ?C显示执行计划
SQL>set autorace on ?C显示执行计划
SQL>set autotrace traceonly ?C只显示执行计划即不显示查询出来的数据
设置完毕后执行SQL语句就会显示执行时间。
oracle sql 语句执行顺序
where 里面条件 and 是先执行 and 前面 还是后面条件
这个其实和你写的顺序不大,这个先后顺序,是数据库来根据表/索引的信息来决定的。
例如一个 学生表, 有学号,姓名,性别
其中 学号是主键, 姓名上面有个索引。
找 名字叫 强妹 的女生:
SELECT * FROM 学生 WHERE 姓名='强妹' AND 性别 = '女'
与
SELECT * FROM 学生 WHERE 性别 = '女' AND 姓名='强妹'
数据库在处理 SQL 以前,都会去分析, 发现 查询的条件中, 姓名上面有索引,而性别上面没有。 那么优先根据 姓名的条件, 去检索,然后再去把通过索引得到的数据,去筛选 性别=女的
比如表里面共有10000行。姓名叫 '强妹' 的只有一个。
那么通过索引,一步就定位到那一行。
然后再判断这一行数据的 性别字段, 是不是 = '女'
假如 姓名/性别 都没有索引呢?
那就是执行 全表扫描。
不分先后。
什么意思呢?
就是假如 表里面10000行数据。
那就是从第一行开始, 查看 姓名与性别 条件。 满足的返回。 不满足的丢弃。 直到100行都处理完。
并不是一口气把所有的数据,都放到内存里面,然后 姓名判断一次, 去掉部分, 性别判断一次,再去掉部分。
怎么在Oracle中写执行sql的sql语句
可以使用 execute immediate
--FYI
--execute immediate不支持多行返回,如果需要可新建临时表
declare
v_source_sql varchar2(1000);
v_union_sql varchar2(1000);
begin
select column_name into v_source_sql from table_name ;--get source sql
v_union_sql='select * from tablename2,('||v_source_sql ||') h where 。。';--sql str
-- 之前先创建好所需字段的temp_table
execute immediate('insert into temp_table '||v_union_sql );
--在临时表中就是你所需要的数据。
exception 。
--如果只是需要返回单行数据,则可将execute immediate嵌入在sql中使用
--execute immediate str into parameter1 ,parmeter2。--返回参数
where column=:parameter。.条件参数
--
-我说的很仔细吧:) 今天心情好
end;
Oracle中怎样一次执行多条sql语句
有时我们需要一次性执行多条sql语句,而用来更新的sql是根据实际情况用代码拼出来的
解决方案是把sql拼成下面这种形式:
begin
update TB_VG set seq = 1, vessel_id = 'Jin14', vessel_type = 'TRACK' where batch_number = '20837' and train_id = '0233086';
update TB_VG set seq = 2, vessel_id = 'Jin14', vessel_type = 'TRACK' where batch_number = '20992' and train_id = '0233110';
end;
总结如下:
以begin开始,以end;结尾(end后的分号不能省),中间的每个sql语句要以分号;结尾
在实际编码中,发现即使这样也会有错误发生,把sql语句中的换行符替换成空格就可以了
比较稳妥的编码方式是:
1、以正常的方式编写sql,根据阅读与编写的需要,中间肯定会有换行符
2、在执行之前进行替换:strSql = strSql.Replace("r\n", " ").Replace('\n', ' ');
如果不采用这种方式,可能的异常有:
ORA-00933: SQL 命令未正确结束(如果sql没有以分号结尾)
ORA-00911: 无效字符(如果未加begin 和 end)
ORA-06550: 第x行, 第xxx列: PLS-00103: 出现符号 "end-of-file"在需要下列之一时:。。(如果end后面没有;分号)
ORA-06550: 第x行, 第xxx列: PLS-00103: 出现符号 ""在需要下列之一时:。。(语句之间有换行符)
Oracle中优化SQL语句执行的原则是什么
1。
已经检验的语句和已在共享池中的语句之间要完全一样 2。变量名称尽量一致 3。
合理使用外联接 4。少用多层嵌套 5。
多用并发 语句的优化步骤一般有: 1。调整sga区,使得sga区的是用最优。
2。sql语句本身的优化,工具有explain,sql trace等 3。
数据库结构调整 4。项目结构调整 写语句的经验: 1。
对于大表的查询使用索引 2、少用in,exist等 3、使用集合运算 1.对于大表查询中的列应尽量避免进行诸如 To_char,to_date,to_number 等转换 2.有索引的尽量用索引,有用到索引的条件写在前面 如有可能和有必要就建立一些索引 3.尽量避免进行全表扫描,限制条件尽可能多,以便更快 搜索到要查询的数据 如何让你的SQL运行得更快 交通银行长春分行电脑部 任亮 ---- 人们在使用SQL时往往会陷入一个误区,即太关注于所得的结果是否正确,而忽略了不同的实现方法之间可能存在的性能差异,这种性能差异在大型的或是复杂的数据库环境中(如联机事务处理OLTP或决策支持系统DSS)中表现得尤为明显。笔者在工作实践中发现,不良的SQL往往来自于不恰当的索引设计、不充份的连接条件和不可优化的where子句。
在对它们进行适当的优化后,其运行速度有了明显地提高!。