Oracle面试问题汇总
1:SqL 优化
1:尽量避免使用 select * 查询方式
?因为oracle 在解析过程中 会将*依次转化成所以的列名。
2:减小访问数据库的次数
因为每执行一条sql语句的时候,oracle内部会做许多的事情 如:解析sql ,估算索引的利用效率,绑定变量,读数据块等。因此减小了访问数据库的次
数实际就是减小了oracle的工作量
3:用where前条件查询来代替having后条件查询
因为使用having后条件查询的话,会检索出所以记录之后,才对结果集进行过滤 而使用where前条件查询的话 它首先会通过条件限制了记录的数目,这样减小了开销
4:尽量使用exists代替in 用 not exists 代替 not in
因为在相关子查询中 我们使用 in? 或者 not in 的话,它会执行内部的排序与合并
如 查询一条in(1,2,3,1);它会对这里面的数据进行排序
?无论是那种情况in 或者 not in 是相当的低效的 因为 它还有对子查询相关联的表进行全表遍历,我们可以把in? notin 改成exists 或 notExists
如下面的sql语句:
select * from emp where deptno in (select deptno fromdept where dnmae="jong")
select * from emp where exists(select 1 from dept where emp.deptno =deptno anddname = 'jong')
5:用Exists代替distinct
因为在相关子查询中distinct 把结果集查出来,内部,还会查找 重复的结果集
6:应该用union代替or
select * from emp where empid = 'df' or empid ='1002'?
而union会将两个结果集进行合并
8:用rowid来删除重复记录数
所用的字段都是相同的,只有rowid不是重复的,所以要删除重复记录时,我们 充分利用rowid来删除重复记录
9:使用DECODE函数来减少处理时间
使用DECODE函数来减少处理时间 使用DECODE函数可以避免重复扫描相同记录或重复连接相同的表.?
10:用TRUNCATE替代DELETE来删除数据
11:使用表的别名
12:尽量多使用COMMIT
?因为comit会释放资源
13:用>=替代>
14:sql语句大写,因为oracle解析sql语句的时候,会将小写转化成大写
15:表的驱动方式也会关系的 sql优化 不同的驱动方式,结果不一样
16:用索引来提高效率
因为索引就相当于书的目录 如果我们看一本书,如果我们要查找相关联的内容,我们就可以通过书的目录快速的定位到多少页来查看书的内容
当然我们在使用索引时要注意以下问题:
a:不能在索引列上使用远算:包括算术远算,逻辑远算 这样是相当的消耗性能的
?
b:避免在索引列上使用NOT:
通常,我们要避免在索引列上使用NOT,NOT会产生在和在索引列上使用函数相同的影响。当ORACLE遇到NOT,他就会停止使用索引转而执行全表扫描。
?
?
2:根据项目中的业务讲一下你使用的存储过程
例如前台界面是“结算操作”业务,根据输入了的结算时间段和结算单位,购买额数,以及相关的控制参数 把这些参数传给后台存储过程,后台存储过程里面可以编制相关的结算处理程序,根据输入的单位、时间、份额等参数,来进行集中处理,这个过程是不需要与前台进行交互的,这里可以处理很复杂的业务,例如结算操作会涉及到多个表如单位基本信息表、单位结算信息表、明细表等等,这个是在存储过程里面集中实现处理,然后把结果返回给前台,前台根据处理结果是否成功,决定是否进行提交(COMMIT)操作。
3:oracle自动增长如何实现
?
oracle不像Mysql样创建主键的时候可以手动设置它的主键为自动增长型,而oracle需要通过序列来生成主键,创建一个序列一般?????????select?max(e1.rowid)?from?employee e1?where?
????????e1.emp_id=e2.emp_id?and?e1.emp_name=e2.emp_name?and
?
?
??????????????????e1.salary=e2.salary);
?
rownum是行数,ROWID是物理编号 ?
通过唯一rowid实现删除重复记录.在Oracle中,每一条记录都有一个rowid,rowid在整个数据库中是唯一的
10:oracle 的内置函数?
1:oracle 提供一些内置函数 用于sql的结构化查询 语句?
? sql的结构查询语句分为:1:dml 语句 :数据操作语言 insert update select delete Merge 等 操作?
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?2: ddl 语句 : 数据定义语言 create alter drop delete 等?
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?3:dcl 语句: 数据 控制语言 grant ,revoke
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?4:事务控制语句:rollback commit savapoint?
?日期函数:SysDate 得到 系统当前 时间?
分组函数: ?count ?max min avg?
?
?11:oracle体系结构
完整的Oracle数据库通常由两部分组成:实例和数据库。
?1、数据库是一系列物理文件的集合(数据文件,控制文件,参数文件 日志文件??当你执行 了 insert update delete 动作的时候,日志文件会记录你的相应信息。?
?