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增强。
  • 触发器类型
    语句级触发器(表级触发器):在指定的操作语句执行之前或之后执行一次,不管它影响了多少行
    行级触发器:出发语句作用的每一条语句都会被触发。
相关推荐
秦jh_21 小时前
【Redis】初识高并发分布式和Redis
数据库·redis·缓存
远方160921 小时前
115-使用freesql体验Oracle 多版本特性
大数据·数据库·sql·ai·oracle·database
happymaker062621 小时前
JDBC(MySQL)——DAY01
数据库·mysql
qqacj1 天前
MSSQL2022的一个错误:未在本地计算机上注册“Microsoft.ACE.OLEDB.16.0”提供程序
数据库·microsoft
ren049181 天前
MySQL
数据库·mysql
良逍Ai出海1 天前
OpenClaw 新手最该先搞懂的 2 套命令
android·java·数据库
Keanu-1 天前
Redis 主从复制及哨兵模式配置
服务器·数据库·redis
blues92571 天前
【JOIN】关键字在MySql中的详细使用
数据库·mysql
x-cmd1 天前
[260307] x-cmd v0.8.6:新增 gpt-5.4 模型支持,sudo/os/hostname/cpu 等模块文档更新
java·数据库·gpt·sudo·x-cmd·googel
JuneXcy1 天前
第10章 数据库的安全与保护
数据库·mysql