Oracle性能优化与Delphi代码
Oracle性能优化与Delphi代码
刚学了点oracle方面的知识,感觉以前写代码只凭喜好写,完全没有深究缘由,导致在内行人看来,写的都是垃圾代码,现在就把学到的一些东西写出来,也算是给刚入门的朋友一点帮助吧。
以前,写数据库访问代码,感觉很简单,不就是sql语句嘛,所以什么语句都是这样写:
A:
qry1.Close;
qry1.SQL.Text := edt1.Text ;
qry1.Open
;
感觉挺好,语句自己拼,拼好了,直接执行。
还有另外一种写法:
B:
qry1.Close;
qry1.SQL.Text := edt1.Text
;
qry1.Parameters.ParamByName('vvv').Value := edt2.Text ;
qry1.Open
;
感觉这样写也是达到一样的结果,而用参数的方法,感觉很麻烦,多余,edt1.Text里变量还都得写成参数,所以从来不这样写,似乎也看不出和A方法有什么区别,只是更多了些麻烦。
最近学了点oracle性能优化方面的知识,知道了oracle的共享池,及其对性能的影响。共享池保存的是最近使用的sql语句,如果有相同的sql语句在共享池中,就不会再做分析、生成执行计划,效率就会提高很多,但是select
* from tableA where aa='a'和select * from tableA where
AA='a',会被认为是不同的sql语句,oracle会检查共享池里有没有完全相同的语句,没有则分别做分析、生成执行计划,虽然实质上是一样的sql语句。
所以,可以通过绑定变量的方式,使这些只是条件不同的语句,可以使oracle能够重复利用执行计划。
测试一下。
在pl/sql里的sql windows里,执行语句:
select sql_text from v$sqlarea where sql_text
like '%select * from abc where%'
查看共享池中的sql语句,返回的结果只有一行:
select sql_text
from v$sqlarea where sql_text like '%select * from abc where%'
然后执行语句:
select * from abc where ff =
1234
然后再查看共享池中的sql语句,看到了,这回结果集有两行返回:
select sql_text from v$sqlarea where
sql_text like '%select * from abc where%'
select * from abc where ff =
1234
执行:
select * from abc where ff =
345
然后再查看共享池中的sql语句,看到了,这回结果集有三行返回:
select sql_text from v$sqlarea where
sql_text like '%select * from abc where%'
select * from abc where ff =
1234
selec
相关文档:
大学的时候,我是管理学院的,后来细分专业的时候选择了信息管理。于是管理、会计、财务、机械、电子,甚至说情报检索都学过,当然也包括计算机。
如果不算foxbase和foxpro的话,数据库方面仅仅学过一门数据库原理,用的教材是Stanford的影印版。
当时有一个韦老师,总是吹她老公是MIT的博士,很NB。总是对 ......
一、启动和关闭Oracle数据库
要启动和关闭数据库,必须要以具有Oracle 管理员权限的用户登陆,通常也就是以具有SYSDBA权限的用户登陆。一般我们常用INTERNAL用户来启动和关闭数据库(INTERNAL用户实际上是SYS用户以SYSDBA连接的同义词)。Oracle数据库的新版本将逐步淘汰INTERNAL这个内部用户,所以我们最好还是设置DB ......
应用系统不能运行,告警日志报告临时表空间不能扩展,估计是业务sql存在大量排序,只能增加临时表空间缓解这个问题。
另外还可能要清理临时段重整临时表空间释放空间:
查看一下认谁在用临时段:
SQL> SELECT /*+ rule */ se.username,se.sid,se.serial#,se.sql_address,se.machine,se.program,
su.tablespace,su.se ......
管理表
表是真正存储信息的对象。
1 数据类型
(1)数值类型:用于存储整数、浮点数、实数。
number(精度,范围)精度是指数字个数总和,范围是指小数点右边的位数。
(2)字符类型:声明包含了字母、数字数据的列。
char:存储固定长度字符串
&n ......