oracle面试题

Oracle

Oracle数据库

对索引的理解
  • 索引相当于字典的目录,作用在于提升查询效率,降低磁盘读写,提升数据库性能。
  • 索引是一种独立于表的数据库对象,可以存储在于不同的磁盘中间或者表空间。
  • 索引一旦创建,由oracle数据库自己来维护,并且由oracle管理系统来指定何时使用索引,我们不需要在查询语句中自己指定索引。
  • 索引的删除或者损毁不会对数据库表带来影响,只会影响查询效率
  • 创建索引的时候,如果没有指定表空间,会存储到默认的表空间
  • 在删除表的时候,基于表的索引会被删除
索引的工作原理

创建索引的时候,oracle会先在表空间中给索引开辟一个空间,并按索引字段对应的值进行分组,并把分好组的地址rowId存入索引空间中,当再次查询的时候,数据库会自动判断查询的条件中是否建有索引,如果有,则根据索引去查询符合条件的数据。

索引的创建

索引的创建有两种

  • 自动创建--即在创建主见primarykey或者唯一性约束unique的时候,数据库会自动在相应的列上,创建唯一性索引。一般业务过程中通过逐渐查询比较频繁,提升查询效率。
  • 手动创建--即在不唯一的裂伤创建非唯一的索引,加速查询效率。create index index_xxxx on mytable(创建索引的列) ta b lespace 表空间(表空间可以不指定) 工具创建。
索引的弊端

一般在数据比较大的表中并且经常查询的字段上才建立索引,数据量小或者不经常查询的字段建立索引的话,不仅占用内存空间,而且会降低查询效率,索引不是越多越好。
以下情形不要创建索引

  • 表很小
  • 表不经常作为连接条件的
  • 表经常更新的。
    系统日志历史表必须增加索引,效率超高。
执行计划

查询索引是否生效以及预估索引性能效果等

explain plan window 窗口

对查询语句按F5

数据字典

主要存储的是数据库系统信息,由数据库系统自己去维护管理,一般我们只进行查询,不作修改。

PLSQL

是oracle对sql语言的过程化扩张,是存储过程的基础。

组成:声明部分、可执行部分、异常处理部分、普通变量、引用变量(%type)、记录行变量(%rowtype)

使用引用类型,当列中的数据类型发生改变,不需要修改变列的类型。而使用普通方式,当列的类型改变时,需要修改变列的类型。使用%type是非常好的编程风格,因为它使得PL/SQL更加灵活,更加适应于对数据库定义的更新。

游标cursor

可以理解为数据库表返回的结果集,它带有向前移动的指针,并且每次只向前移动一行数据。

作用:可以临时存储返回的多行数据,通过变量游标,可以得到每一行的数据。

存储过程 program window--procedure

定义:是一组预编译的sql语句,也就是给plsql语句包装起来,完成一次创建任意调用的功能,相当于java中的方法。
作用:1.在开发中,有时候为了某种特定的业务功能,需要对数据库进行多次的连接关闭,这种连接关闭是很耗费资源的。并且会对数据进行多次的IO读写,性能比较低,如果把业务功能放在plsql中,只需要连接关闭一次数据库就可以实现我们的业务功能,大大提高了效率。

2.更好的安全机制,对于没有权限执行存储过程的用户,也可以授权他们执行存储过程。

3.对应大量的sql语句和重复执行的sql语句,存储过程执行要快。
参数:不带参数的、待输入参数的,待输入输出参数的。

存储过程和存储函数的区别

1.存储过程可以有返回值也可以没有返回值,存储函数必须有返回值。

2.存储过程和存储函数都可以通过输出参数out实现多个返回值。
如何选择:

原则上只有一个返回值的用存储函数,否则用存储过程,但是我们一般都使用存储过程

  • 1.存储过程可以返回值也可以没有返回值,存储的灵活性。
  • 2.存储过程既然有返回值了,可以替代存储函数
  • 3.oracle新版本中已经不推荐适用存储函数了。
触发器
  • 是一小段plsql程序
  • 用来触发dml(insert、update、delete)操作的
  • 在进行dml操作时会自动触发执行的一段程序
    换句话说:触发器就是在执行某个操作(增删改)的时候出发一个动作(一段程序)。有点像struts2的拦截器,可以对cud增强。
  • 触发器类型
    语句级触发器(表级触发器):在指定的操作语句执行之前或之后执行一次,不管它影响了多少行
    行级触发器:出发语句作用的每一条语句都会被触发。
相关推荐
罗超驿4 小时前
18.事务的隔离性和隔离级别:MySQL面试高频考点全解析
数据库·mysql·面试
jran-4 小时前
Redis 命令
数据库·redis·缓存
小江的记录本4 小时前
【Java基础】Java 8-21新特性:JDK21 LTS:虚拟线程、模式匹配switch、结构化并发、序列集合(附《思维导图》+《面试高频考点清单》)
java·数据库·python·mysql·spring·面试·maven
June`5 小时前
多线程redis下如何解决aof重写和rdb持久化的数据一致性问题
数据库·redis·缓存
二宝哥5 小时前
离线安装maven
java·数据库·maven
SZLSDH5 小时前
场景适配论 | 数字孪生IOC建设中渲染技术与智能体能力的协同逻辑
前端·数据库·ai·数字孪生·数据可视化·智能体
这个DBA有点耶5 小时前
SQL改写实战:子查询、CTE、窗口函数性能对比
数据库·mysql·性能优化
@我漫长的孤独流浪5 小时前
数据库完整性约束全解析:从理论到实践
数据库
l1t6 小时前
DeepSeek总结的 DuckDB 1.5.3:并非普通的补丁版本
数据库·duckdb
云商直通车6 小时前
华为云ECS购买与配置超详细教程
服务器·数据库·华为云