Oracle面试题

一、in 和 not in 都走索引吗?
在这里插入图片描述
where 条件为 in 两个数值 走了索引。
在这里插入图片描述
where 条件为 not in 两个数值 没有走索引。

二、delete 和 truncate 的区别?

delete 是 dml 语句 删除数据可以加条件 删除数据可以恢复
truncate 是ddl 语句 删除数据不可以加条件 删除数据不可以恢复

三、Oracle 优化

1、Order By语句加在索引列,最好是主键PK上。
2、用EXISTS替换DISTINCT:EXISTS 使查询更为迅速,因为RDBMS核心模块将在子查询的条件一旦满足后,立刻返回结果.

(低效): SELECT DISTINCT DEPT_NO,DEPT_NAME FROM DEPT D , EMP E WHERE D.DEPT_NO = E.DEPT_NO And E.sex =man
(高效): SELECT DEPT_NO,DEPT_NAME FROM DEPT D WHERE EXISTS ( SELECT ‘X’ FROM EMP E WHERE E.DEPT_NO = D.DEPT_NO And E.sex =man );

四、Oracle 三大范式

1NF、数据库表中列都是单一属性,不可再分。
2NF、非主键字段依赖主键字段。
3NF、非主键字段与主键字段直接相关,而不间接相关

五、in 和 exists

select * from t1 where id in (select id from t2); 
select * from t1 where exists (select 1 from t2 where t1.id=t2.id); 

执行结果显示,两个 sql 分别执行 1.3s 和 3.4s 。
----------t1 表数据量为 100W, t2 表数据量为 200W 。

如果查询的两个表大小相当,那么用in和exists差别不大;如果两个表中一个较小一个较大,则子查询表大的用exists,子查询表小的用in;

对应于此处就是:
当 t1 为小表, t2 为大表时,应该用 exists ,这样效率高。
当 t1 为大表,t2 为小表时,应该用 in,这样效率较高。

select * from t2 where id in (select id from t1); 
select * from t2 where exists (select 1 from t1 where t1.id=t2.id); 

执行结果显示,两个 sql 分别执行 1.8s 和 10.0s 。

对于 in 来说,大表小表调换了内外层关系,执行时间并无太大区别。一个是 1.3s,一个是 1.8s。
对于 exists 来说,大小表调换了内外层关系,执行时间天壤之别,一个是 3.4s ,一个是 10.0s,足足慢了两倍。

六、SQL优化

1、创建索引
优点:查询速度读取快。
缺点:占内存,插入数据变慢。
(整表字段加索引的缺陷)
2、对表数据进行分区
优点

  1. 改善查询性能:对分区对象的查询可以仅搜索自己关心的分区,提高检索速度。
  2. 增强可用性:如果表的某个分区出现故障,表在其他分区的数据仍然可用;
  3. 维护方便:如果表的某个分区出现故障,需要修复数据,只修复该分区即可;
  4. 均衡I/O:可以把不同的分区映射到磁盘以平衡I/O,改善整个系统性能。

缺点:

  1. 分区表相关,已经存在的表没有方法可以直接转化为分区表。不过 Oracle 提供了在线重定义表的功能。

3、脚本关键词的优化(in、exists)

  1. 外表数据量大,内表数据量小可使用 in ( in 可以理解为一个子查询,会先全表扫描再根据条件匹配)
  2. 外表数据量小,内表数据量大可使用 exists( exists 是匹配每行数据匹配上才满足条件)

七、Oracle和sql server的区别

  1. Oracle支持多种操作系统,sql server支持window系统
  2. Oracle的安全认证获得最高认证级别的ISO标准认证,而SQL Server并没有获得什么安全认证
  3. Oracle 性能最高, 保持windowsNT下的TPC-D和TPC-C的世界记录。SQL Server 多用户时性能不佳

八、数仓的基本架构(离线数仓)
ODS-DWD-ADS-BDS
ODS:类源层(源数据备份包导入还原原表)
DWD:整合层(通过逻辑处理整合各个模块的数据)
ADS:集市层(根据不同维度在DWD取数形成一个个宽表)
BDS:备份层(把DWD和ADS中的表每天全量备份到BDS中)

九、拉链表的理解
记录数据在某一时间区间内的状态
以及数据在某一时点上的变化的数据存储方式
存储的数据是数据的状态,新增、字段(金额变化)的数据
不是技术,而是解决方案。目的:节约存储空间

取2022-04-01日当天时间的数据
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值